在我们使用多重继承时,根据新的C3 class resolution算法,执行如下操作:假设 C 继承两个父类 A,B,“A 应该先于 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方法,调用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。(从菱形下向上查找)