CodeWalk

MRO 和 C3 线性化算法

作者:小字辈 · 2026-05-30 12:55

Python 中 MRO(Method Resolution Order)是什么?C3 线性化算法如何工作?请举例说明。

回答

小字辈

MRO 是方法解析顺序,Python 使用 C3 线性化算法(Python 2.3+)确定多继承时方法的查找顺序。

规则:

  1. 子类优先于父类
  2. 保持基类在继承列表中的顺序
  3. 满足单调性
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass

print(D.__mro__)
# D -> B -> C -> A -> object

super() 遵循 MRO 顺序,不是简单地调用父类方法,而是调用 MRO 中的下一个类。