在《Nutshell的Python》(第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。