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

python多继承的类型定义了同一个属性或者方法

在 Python 中,当一个类通过多继承同时继承多个父类,且这些父类中定义了同名的属性或方法时,Python 会按照方法解析顺序(MRO,Method Resolution Order) 来确定最终使用哪个父类的属性或方法。

1 方法解析顺序(MRO)

MRO 是 Python 解决多继承冲突的核心规则,它定义了类在查找属性或方法时的顺序。可以通过类的 mro 属性或 mro() 方法查看具体顺序。
Python 3 中,MRO 采用 C3 线性化算法,遵循以下原则:
子类优先于父类。
多个父类按继承时的声明顺序查找。
保证父类的 MRO 顺序不变。
2. 同名属性 / 方法的覆盖规则
当多继承的父类存在同名属性或方法时,解释器会按 MRO 顺序依次查找,找到第一个匹配的属性或方法后就停止查找。
3. 示例说明
示例 1:同名方法的冲突

class A:def show(self):print("A 的 show 方法")class B:def show(self):print("B 的 show 方法")

多继承:C 同时继承 A 和 B

class C(A, B):  # 继承顺序为 A -> Bpassc = C()
c.show()  # 输出:A 的 show 方法(按 MRO 先找到 A 的 show)

查看 C 的 MRO
print(C.mro())
输出:[<class ‘main.C’>, <class ‘main.A’>, <class ‘main.B’>, <class ‘object’>]
由于 C 继承顺序是 A, B,MRO 中 A 在 B 之前,因此 c.show() 调用的是 A 的方法。
示例 2:同名属性的冲突

class X:name = "X"class Y:name = "Y"class Z(X, Y):  # 继承顺序 X -> Ypassz = Z()
print(z.name)  # 输出:X(按 MRO 先找到 X 的 name)

示例 3:子类重写同名方法
如果子类自己定义了同名属性或方法,则会覆盖所有父类的定义(符合 “子类优先于父类” 原则):

class A:def show(self):print("A 的 show")class B:def show(self):print("B 的 show")class C(A, B):def show(self):  # 子类自己的方法print("C 的 show")c = C()
c.show()  # 输出:C 的 show(子类优先)
  1. 如何主动调用父类的同名方法?
    如果需要在子类中主动调用某个父类的同名方法,可以使用 super() 或直接通过父类名调用:
class A:def show(self):print("A 的 show")class B:def show(self):print("B 的 show")class C(A, B):def show(self):super().show()  # 按 MRO 调用下一个类的 show(这里是 A)B.show(self)    # 直接指定调用 B 的 showc = C()
c.show()

输出:
A 的 show
B 的 show

总结

多继承中同名属性 / 方法的选择由 MRO 决定,遵循 “先子类后父类,按继承声明顺序查找” 的规则。实际开发中应尽量避免复杂的多继承,如需使用,可通过 mro 明确查找顺序,或用 super() 主动控制调用逻辑。

http://www.dtcms.com/a/613958.html

相关文章:

  • Springboot中CommandLineRunner的用法以及执行顺序的控制
  • (60页PPT)IDC云数据中心机房运维服务解决方案(附下载方式)
  • php网站开发 多少钱青海做网站最好的公司
  • 鸿蒙PC生态实践:LAME 音频编码库移植与工程化指南
  • 可以上传视频的网站建设中国科技成就手抄报
  • Redis_12_持久化(1)
  • stm32f4点灯
  • 自己做网站详细步骤电脑如何安装免费wordpress
  • 前端微前端样式隔离,CSS-in-JS方案
  • 【go.sixue.work】2.3 面向对象:结构体里的 Tag 用法
  • Halcon ROI 与图像仿射变换笔记
  • 软件设计师(软考中级)公式速记笔记
  • 电商网站开发过程手机推广app
  • 18.HTTP协议(三)
  • 产科信息管理系统,智慧产科源码,支持与医院HIS、EMR系统及国家级妇幼平台的数据对接
  • 在VPython中使用向量计算3D物体移动
  • R语言在线编译器 | 提供方便快捷的数据分析工具
  • YOLOv8多场景人物识别定位与改进ASF-DySample算法详解
  • 网网站基础建设优化知识成都感染人数最新消息
  • 电商网站建设实训要求威海好的网站建设公司哪家好
  • Ionic 安装指南
  • kubernetes 导入镜像tar包
  • 南通网站开发上海网站搭建
  • oracle 物化视图设置自动更新日志
  • Java测试题
  • YOLO v11的学习记录(五) 使用自定义数据从头训练一个实例分割的模型
  • 大模型Agent工作流设计模式深度解析:从ReAct到ReWOO的实践演进
  • redis的配置windows
  • 漯河英文网站建设秦皇岛陵县网站建设
  • HTML5+CSS3+JS小实例:螺旋鼠标轨迹