为什么当一个子类继承/不继承Python中的第三个类时,这个类的MRO会发生变化



我正在努力更好地理解Python&遇到了这个例子:

class A:
def process(self):
print('A process()')

class B(A):
pass

class C(A):
def process(self):
print('C process()')

class D(B,C):
pass

obj = D()
obj.process()

其打印";C进程((";。我理解为什么,因为订单是D>B>C>A.但是,当类C不继承A时;一个进程((;打印&则顺序转移到D>B>A>C.是什么原因导致订单转移到这里?为什么C超类现在没有在A类之前到达?

C3线性化算法在某种程度上是深度优先的,因此从B(在基类列表中列在C之前(可到达的A被添加到C之前。

理由是CCD_;B型";比";类似于"C";,所以任何属于";B";应出现在";C";。

(为了好玩,看看当C仍然继承自A时,如果您尝试类似class D(B, A, C)的东西会发生什么。(

最新更新