MRO是Python多继承中方法解析的线性顺序,由C3算法确定,存储在__mro__属性中,确保子类优先、父类按声明序排列且无重复。
Python 的类继承顺序由 MRO(Method Resolution Order,方法解析顺序)决定,它决定了多继承时属性和方法从哪个父类开始查找。理解 MRO 是正确使用多继承、避免意外覆盖或 AttributeError 的关键。
MRO 是一个类的线性化继承链,以元组形式存储在类的 __mro__ 属性中,或通过 mro() 方法获取。Python 使用 C3 线性化算法计算 MRO,确保: - 子类总在父类之前 - 各父类按声明顺序出现 - 每个类只出现一次,且满足所有父类的局部优先级约束
直接访问类的 __mro__ 或调用 mro():
class A: pass
class B: pass
class C(A, B): pass
print(C.__mro__) #
注意:MRO 在类定义完成时即确定,不能运行时修改;若继承关系导致无法满足 C3 规则(如 class D(B, A) 与 C(A, B) 共存于某继承结构中),Python 会在定义时抛出 TypeError: Cannot create a consistent method resolution order (MRO)。
立即学习“Python免费学习笔记(深入)”;
当调用 obj.method() 时,Python 按 MRO 顺序从左到右搜索第一个匹配的方法:
例如:
class A:
def hello(self): print("A")
class B:
def hello(self): print("B")
class C(A, B):
def hello(self):
super().hello() # 实际调 A.hello,因 A 在 MRO 中先于 B
A.__init__(self)),容易遗漏或重复初始化
通用行为放在靠右的父类位置,让具体类优先控制流程cls.__mro__ 是最快定位问题的方式