You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python方法解析顺序(MRO)原理及代码输出解析

Python 方法解析顺序(MRO)工作机制与代码输出解析

一、MRO核心逻辑

Python的MRO是多继承场景下方法/属性的查找规则,基于C3线性化算法实现,核心目标是:

  • 保证每个类仅被访问一次
  • 遵循子类优先于父类的原则
  • 尊重子类继承列表中父类的声明顺序
  • 解决菱形继承(多个子类继承同一父类)的歧义问题

二、示例代码、继承关系与输出分析

示例代码

class Base:
    def func(self):
        print("Base.func()")

class Left(Base):
    def func(self):
        print("Left.func()")

class Right(Base):
    def func(self):
        print("Right.func()")

class Derived(Left, Right):
    pass

obj = Derived()
obj.func()

继承关系图

Base
   /    \
 Left  Right
   \    /
  Derived

运行输出

Left.func()

输出原因

调用obj.func()时,Python会按照Derived类的MRO顺序查找方法:

  1. 先检查Derived自身,无func方法
  2. 接着检查Left,找到func方法并执行,终止查找

你可以通过以下命令查看Derived类的MRO顺序:

print(Derived.mro())
# 输出: [<class '__main__.Derived'>, <class '__main__.Left'>, <class '__main__.Right'>, <class '__main__.Base'>, <class 'object'>]

三、C3线性化算法的关键规则

  • 子类优先:子类的位置始终在所有父类之前
  • 顺序保留:继承列表中父类的声明顺序会被保留在MRO中
  • 单调性:如果类X在类Y的MRO中出现在Z之前,那么在所有包含X、Y、Z的MRO中,X都在Z之前

四、学习资源建议

  • 深入阅读Python官方文档中关于MRO的说明,理解C3算法的推导过程
  • 编写不同继承结构的测试代码,打印MRO并对比方法查找结果
  • 分析复杂多继承场景(如多层嵌套继承)的MRO路径,巩固理解

内容的提问来源于stack exchange,提问作者Vikalp Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:20:19