多重继承怪癖,还是Python中的错误?

战争艺术

我正在写一个应该除其他类之外的类的类code.InteractiveInterpreter由于某种原因,compile当您使用多重继承时,该类通常具有(的方法之一在其子类上不可用。

单继承工作正常:

>>> from code import InteractiveInterpreter
>>> class Single(InteractiveInterpreter): pass
...
>>> hasattr(Single(), 'compile')
True

多重继承不:

>>> class Double(object, InteractiveInterpreter): pass
...
>>> hasattr(Double(), 'compile')
False

翻转订单,但可以:

>>> class Flipped(InteractiveInterpreter, object): pass
...
>>> hasattr(Flipped(), 'compile')
True

我是否不知道多重继承的一些细微细节compile在某些情况下会阻止继承,或者是Python中的错误导致了这种情况(考虑到方法的名称也是内置方法的名称,在功能上,我觉得这是可能的。

我正在尝试使用其他类来重现此问题,InteractiveInterpreter但无法执行以下操作:

>>> class Original():
...     def compile(self): pass
...
>>> class Secondary(object, Original): pass
...
>>> hasattr(Secondary(), 'compile')
True

我在Windows 10上使用32位Python 2.7.11。

杰瑞德

您确定Flipped产生了给定的结果吗?

我得到了类似的设置,

>>> from code import InteractiveInterpreter
>>> class Flipped(InteractiveInterpreter, object): pass
... 
>>> hasattr(Flipped(), 'compile')
True

基于对模块的源compile不是方法的类的,但一个实例属性上对象初始化创建。有道理的是,从objectfirst继承不会提供属性,因为它是__init__已定义的,并且子类不会调用InteractiveInterpreter.__init__以分配属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python中的优雅多重继承

来自分类Dev

Python。我在多重继承时遇到错误

来自分类Dev

Mixins还是Objective-C中的多重继承?

来自分类Dev

python中多重继承中的super()用法

来自分类Dev

Python和多重继承中的方法顺序

来自分类Dev

Python和构造函数中的多重继承

来自分类Dev

带有super的python中的多重继承

来自分类Dev

python类多重继承中的方法重写

来自分类Dev

带有super的python中的多重继承

来自分类Dev

Python ABC多重继承

来自分类Dev

Python多重继承问题

来自分类Dev

休眠中的多重继承?

来自分类Dev

休眠中的多重继承?

来自分类Dev

Python多重继承错误:对象没有属性

来自分类Dev

python3中具有不同签名的多重继承

来自分类Dev

在多重继承设置中传递不同参数的Python方法

来自分类Dev

Python中的多重继承-调用__init__时出错

来自分类Dev

Python中的调用解析顺序具有多重继承

来自分类Dev

Python Tkinter:继承语法还是引用错误?

来自分类Dev

Python多重继承:全部调用

来自分类Dev

Python多重继承和super()

来自分类Dev

python ABC和多重继承

来自分类Dev

多重继承中的内存布局

来自分类Dev

在PHP中模拟多重继承

来自分类Dev

C ++中多重继承的限制

来自分类Dev

防止C ++中的多重继承

来自分类Dev

多重继承中的指针相等

来自分类Dev

在多重继承中没用的超级?

来自分类Dev

多重继承中的指针相等