在Python in a Nutshell (2nd Edition) 一书中,有一个示例使用
旧样式类来演示如何以经典解析顺序解析方法以及
它与新顺序有何不同。
我通过用新样式重写示例来尝试相同的示例,但结果与使用旧样式类获得的结果没有什么不同。我用来运行示例的 python 版本是2.5.2。下面是示例:
class Base1(object):
def amethod(self): print "Base1"
class Base2(Base1):
pass
class Base3(object):
def amethod(self): print "Base3"
class Derived(Base2,Base3):
pass
instance = Derived()
instance.amethod()
print Derived.__mro__
调用instance.amethod()
打印Base1
,但根据我对具有新样式类的 MRO 的理解,输出应该是Base3
。调用Derived.__mro__
打印:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
我不确定我对新样式类的 MRO 的理解是否不正确,或者我犯了一个我无法检测到的愚蠢错误。请帮助我更好地了解 MRO。