前言:多继承,是利器还是陷阱?
Python 是少数支持多继承的现代语言之一(Java、C# 都不支持)。多继承允许一个类同时拥有多个父类的属性和方法,非常灵活。但灵活性也带来了复杂性——当多个父类有同名方法时,该调用哪一个? 这就引出了 MRO(Method Resolution Order,方法解析顺序)。
今天我们通过两个经典场景,彻底搞懂 Python 的 MRO 机制,并学会如何优雅地使用多继承(尤其是 Mixin 模式)。
1. 先看一个“菱形继承”问题
假设我们有这样一个继承结构:
class AAA:
def __str__(self):
return "AAA"
class AA1(AAA):
pass
class AA2(AAA):
def __str__(self):
return "AA2"
class A(AA1, AA2):
pass
a = A()
print(a) # 输出什么?
A 同时继承自 AA1 和 AA2,而二者都继承自 AAA。AA2 重写了 __str__,AA1 没有。那么 A 的实例会调用哪个 __str__ 呢?
答案是 AA2 的 __str__。为什么?因为 Python 的 MRO 遵循 C3 线性化算法,保


911

被折叠的 条评论
为什么被折叠?



