在我們使用多重繼承時措拇,根據(jù)新的C3 class resolution算法秒际,執(zhí)行如下操作:假設(shè) C 繼承兩個父類 A赫模,B树肃,“A 應(yīng)該先于 B”。
class A(object):
def foo(self):
print("class A")
class B(object):
def foo(self):
print("class B")
class C(A, B):
pass
C().foo()
上面代碼在查找foo方法時瀑罗,先從C開始找胸嘴,然后A,在A里如果找到foo方法斩祭,調(diào)用A的劣像,依次類推。查找順序 C->A->B摧玫。
在看一個例子:
class A(object):
def foo(self):
print("class A")
class B(A):
pass
class C(A):
def foo(self):
print("class C")
class D(B,C):
pass
D().foo()
先在B里找耳奕,B又繼承自A(C也是繼承自A,但是它有自己的foo方法)诬像,查找順序為 D->B->C->A屋群。(從菱形下向上查找)