python:多重继承、MRO(方法解析顺序)
在 Python 中,当类存在多重继承时,方法的调用顺序由 方法解析顺序(Method Resolution Order, MRO) 决定。
Python 使用 C3线性化算法 来确定类的继承顺序(MRO),其核心规则是:
-
子类优先于父类
-
左侧父类优先于右侧父类(按继承顺序从左到右)
-
同一父类不会被重复查找
可以通过 类名.__mro__
或 类名.mro()
查看继承顺序:
class A:
def say(self):
print("A")
class B:
def say(self):
print("B")
class C(A, B):
print("C")
c = C()
c.say()
输出
C
A
class A:
def say(self):
print("A")
class B:
def say(self):
print("B")
class C(A, B):
print("C1")
def say(self):
print("C2")
c = C()
c.say()
输出
C1
C2
super()用法
class A:
def action(self):
print("A")
class B(A):
def action(self):
super().action()
print("B")
class C(A):
def action(self):
super().action()
print("C")
class D(B, C):
def action(self):
super().action()
print("D")
d = D()
d.action()
输出:
A C B D
关键:
super()
的链式调用
-
super()
的调用顺序 不是由类的定义决定的,而是由实例的 MRO 决定的。 -
在
D
的实例d
中,super()
的调用链始终遵循D.__mro__
的顺序。