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

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__ 的顺序。

相关文章:

  • [问题处理]BCLinux您的授权码是无效的,请获得正确授权码
  • 从传统到轻量级5G:网络架构演变与优化路径
  • 讯飞唤醒+VOSK语音识别+DEEPSEEK大模型+讯飞离线合成实现纯离线大模型智能语音问答。
  • C++笔记之标准库中的std::copy 和 std::assign 作用于 std::vector
  • mongoose和lwip有啥区别
  • 基于SpringBoot+Vue癌症患者交流平台的设计与实现
  • MYSQL的binlog有几种格式分别有什么区别
  • ubuntu追加path环境变量
  • git-提交时间和作者时间的区别
  • 宝塔mysql8.0设置数据库区分大小写
  • 英伟达(NVIDIA)芯片全解析:专业分类、应用场景与真实案例
  • Deepseek私有化部署
  • 车载调频发射机-参观、考察、学习随车讲解的好助手-车载移动调频发射车队解说导览系统应用
  • 什么是uniapi
  • 有道翻译逆向
  • 机器学习实战(9):神经网络基础——从感知机到多层感知机
  • GCC之编译(8)AR打包命令
  • kafka-集群扩容
  • docker 改了镜像源为阿里云,还是下载失败
  • RocketMQ保证消息有序性
  • 用ps做网站广告图/竞价外包推广
  • 如何做网站关键字优化/微信朋友圈广告投放
  • 滨江做网站/南宁seo优化
  • 运城 网站制作/宁波seo搜索优化费用
  • 百度云搜索/网站seo的主要优化内容
  • 怎么做网站弄网盟/海南百度推广公司有哪些