在 Python in a Nutshell (第2版)这本书中有一个例子
旧样式类演示如何按照经典的解析顺序解析方法和
新秩序有什么不同。
我尝试用新样式重写同一个示例,但结果与用旧样式类获得的结果没有什么不同。我用来运行示例的 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。