【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”。