当前位置: 首页 > article >正文

python:多重继承、MRO(方法解析顺序)

在 Python 中,当类存在多重继承时,方法的调用顺序由 方法解析顺序(Method Resolution Order, MRO) 决定。

Python 使用 C3线性化算法 来确定类的继承顺序(MRO),其核心规则是:

  1. 子类优先于父类

  2. 左侧父类优先于右侧父类(按继承顺序从左到右)

  3. 同一父类不会被重复查找

可以通过 类名.__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__ 的顺序。


http://www.kler.cn/a/554495.html

相关文章:

  • 茶叶叶片叶子品相识别检测数据集VOC+YOLO格式5631张2类别
  • TensorFlow深度学习实战——构建卷积神经网络实现CIFAR-10图像分类
  • 2025华为OD机试真题-猜字谜(C++)-E卷-100分
  • Ubuntu 服务器Llama Factory 搭建DeepSeek-R1微调训练环境
  • 【分布式理论16】分布式调度2:资源划分和调度策略
  • Zookeeper应用案例-服务器列表动态更新实现
  • 网关断网缓存:让网络连接更可靠
  • 电脑机箱散热风扇声音大的影响因素
  • 学习记录 DAY10 Tensorflow,神经网络视觉
  • 工控自动化领域:数字量信号与模拟量信号的差异解析
  • 2024华为OD机试真题-恢复数字序列(C++/Java/Python)-E卷-100分
  • 深入理解 Rust 中的 `Box<T>`:堆上的数据与递归类型
  • Grok 3 官宣免费使用
  • 2025鸿蒙开发面试题汇总——通俗易懂
  • leetcode刷题第十三天——二叉树Ⅳ
  • ARM SOC 架构系统M系、R系、A系
  • Git使用[同一电脑多个账户ssh-key的管理]
  • 【Elasticsearch】如何获取一致的评分
  • 深入理解Zookeeper:分布式系统的协调者
  • 设计模式-Java