当前位置: 首页 > 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__ 的顺序。

http://www.lryc.cn/news/540329.html

相关文章:

  • Oracle RAC数据库单节点轮流重启
  • 电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?
  • Vue 3 中如何注册全局自定义组件:一个 SVG 图标的例子
  • SpringBoot+Vue3-学习笔记
  • 银河麒麟系统安装mysql5.7【亲测可行】
  • 为什么WP建站更适合于谷歌SEO优化?
  • ue----git局域网内部署裸仓库,别的机器进行访问
  • leetcode876.链表的中间结点
  • 旧手机热点无法提供ipv6解决方法(emui 8 热点提供ipv6)
  • 解决DeepSeek服务器繁忙问题的实用指南
  • 新数据结构(12)——代理
  • 记一次一波三折的众测SRC经历
  • Laravel从入门到上云
  • 【小游戏】C++控制台版本俄罗斯轮盘赌
  • 【前端】使用WebStorm创建第一个项目
  • 前后端项目部署服务器(传统部署和Docker部署)
  • C++,设计模式,【工厂方法模式】
  • golang--字符串处理(rune类型)
  • 如何通过AI优化敏捷开发中的任务管理与分配?
  • 第1章大型互联网公司的基础架构——1.11 消息中间件技术
  • FlutterAssetsGenerator插件的使用
  • EasyExcel 自定义头信息导出
  • 网络运维学习笔记 012网工初级(HCIA-Datacom与CCNA-EI)某机构新增:GRE隧道与EBGP实施
  • 【系列专栏】银行IT的云原生架构-存储架构-数据库部署 10
  • Python 爬虫selenium
  • 为啥vue3设计不直接用toRefs,而是reactive+toRefs
  • 深入解析 vLLM:高性能 LLM 服务框架的架构之美(二)调度管理
  • VMware安装教程
  • iOS事件传递和响应
  • TensorFlow 实现任意风格的快速风格转换