在書中的Python果殼中的(第2版)存在使用
老樣式類證明方法是如何在經典的分辨率才能解決,
它是如何與新的順序不同的例子。新風格類中的方法解析順序(MRO)?
我試着用新樣式重寫示例來嘗試相同的示例,但結果與使用舊樣式類獲得的結果沒有什麼不同。我用來運行示例的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。
「[祖先類] A [is]被強制僅在其所有子類中以分辨順序進入,因此覆蓋(即C的成員x的覆蓋)實際上是明智的。」 - *主顯節!*由於這句話,我可以再次在我的腦海裏做MRO。 \ o /非常感謝。 – Esteis 2015-02-13 09:56:14