《Python 多继承与 MRO 之谜——从“菱形继承”到 Mixin 设计》

前言:多继承,是利器还是陷阱?

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,而二者都继承自 AAAAA2 重写了 __str__AA1 没有。那么 A 的实例会调用哪个 __str__ 呢?

答案是 AA2 的 __str__。为什么?因为 Python 的 MRO 遵循 C3 线性化算法,保

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值