Python中class的MRO(Method Resolution Order)

【Python class 的類型】

Python中的class分爲classical和new-style兩大類。

classical是Python一直沿用的,new-style是Python 2.2引入的。

一個class繼承於object,或其bases class裏面任意一個繼承於object,這個class都是new-style class。

【MRO - Method Resolution Order】

對於classical和new-style class,在複雜的繼承結構中,class中method的調用順序(MRO)也是不同的。

classical深度優先new-style廣度優先。如下圖:

【示例代碼】

class D:
    def foo(self):
        print "class D"

class B(D):
    pass

class C(D):
    def foo(self):
        print "class C"

class A(B, C):
    pass

f = A()
f.foo()

對於上面 classical 的情況,結果是“class D”。而如果將代碼改爲 class D(object): 的話,結果就是“class C”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章