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

news/2025/2/21 5:23:14

在 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.niftyadmin.cn/n/5860204.html

相关文章

第六届全球数据库大赛:PolarDB TPC-C性能优化挑战赛方案分享(一)--参数调优

文章目录 前言一、基本参数二、提分参数三、关键参数四、遗漏参数总结前言 今年由于阿里承办了全国大学生计算机系统能力大赛PolarDB数据库创新设计赛,本以为数据库大赛会取消,直到十一左右比赛才姗姗来迟,所以赛程较往年缩短了一个月左右,初赛和复赛都只有一个月时间,时…

跟着 Lua 5.1 官方参考文档学习 Lua (5)

文章目录 2.10 – Garbage Collection2.10.1 – Garbage-Collection Metamethods2.10.2 – Weak Tables 2.10 – Garbage Collection Lua performs automatic memory management. This means that you have to worry neither about allocating memory for new objects nor abo…

如何调用 DeepSeek API:详细教程与示例

目录 一、准备工作 二、DeepSeek API 调用步骤 1. 选择 API 端点 2. 构建 API 请求 3. 发送请求并处理响应 三、Python 示例:调用 DeepSeek API 1. 安装依赖 2. 编写代码 3. 运行代码 四、常见问题及解决方法 1. API 调用返回 401 错误 2. API 调用返回…

工程项目管理系统(源码+文档+部署+讲解)

本文将深入解析“工程项目管理系统”的项目,探究其架构、功能以及技术栈,并分享获取完整源码的途径。 系统概述 工程项目管理系统是一个综合性的管理系统,旨在为工程项目的全生命周期提供全面的支持。该系统包括管理端、小程序、信息中心、…

jvm中各个参数的理解

MEMORY - MANAGERS 定义 MEMORY - MANAGERS即内存管理器,它是操作系统或软件系统中负责管理计算机内存资源的组件。从本质上来说,它是一种软件机制,旨在协调计算机系统中内存的分配、使用和回收等操作,确保系统能够高效、稳定地…

实时股票行情接口与WebSocket行情接口的应用

实时股票行情接口与WebSocket行情接口的应用 实时股票行情接口是量化交易和投资决策的核心工具之一,行情接口的种类和功能也在不断扩展。介绍几种常见的行情接口,包括实时股票行情接口、Level2行情接口、WebSocket行情接口以及量化行情接口,…

tailwindcss 前端 css 框架 无需写css 快速构建页面

版本:VUE3 TS 框架 vite 文章中使用tailwindcss 版本: ^3.4.17 简介: Tailwind CSS 一个CSS 框架,提供组件化的样式,直接在HTML 中编写样式,无需额外自定义CSS ,快速! 简洁&#…

使用vscode调试transformers源码

简要介绍如何使用vscode调试transformers源码 以源码的方式安装transformers(官方手册为Editable install) 优先参考官方手册 git clone https://github.com/huggingface/transformers.git cd transformers pip install -e .以下展示transformers/exa…