Python 继承顺序

继承顺序的逻辑是非常重要的,它决定了在使用子类的属性和方法时,Python 解释器的搜索顺序。

在 Python 中,当一个类继承自多个父类时,解释器会按照一定的顺序搜索属性和方法。这个搜索顺序被称为方法解析顺序(Method Resolution Order, MRO)。

假设我们有以下三个类:

class A:def __init__(self):self.a = 1def foo(self):print("A's foo")class B(A):def __init__(self):super().__init__()self.b = 2def foo(self):print("B's foo")class C(A):def __init__(self):super().__init__()self.c = 3def foo(self):print("C's foo")class D(B, C):def __init__(self):super().__init__()self.d = 4def foo(self):print("D's foo")

在这个例子中:

  1. A 是一个基类,定义了 __init__ 方法和 foo 方法。
  2. BC 都继承自 A,并且都重写了 foo 方法。
  3. D 同时继承自 BC,并且也重写了 foo 方法。

现在,让我们创建一个 D 类的实例,并调用它的 foo 方法:

d = D()
d.foo()

输出结果为:

B's foo

这是因为 Python 的继承顺序遵循深度优先、从左到右的原则。具体的搜索顺序如下:

  1. D
  2. B
  3. A
  4. C

当调用 d.foo() 时,Python 首先在 D 类中查找 foo 方法,发现有定义,于是执行 D 类中的 foo 方法。

如果我们调换 BCD 类中的继承顺序:

class D(C, B):def __init__(self):super().__init__()self.d = 4def foo(self):print("D's foo")

此时,输出结果为:

C's foo

这是因为 Python 的搜索顺序变成了:

  1. D
  2. C
  3. A
  4. B

所以,在调用 d.foo() 时,Python 会先在 D 类中查找 foo 方法,发现没有定义,然后按照 MRO 顺序在 C 类中找到并执行 foo 方法。

总的来说,继承顺序的逻辑是:

  1. 深度优先:先搜索子类,再搜索父类。
  2. 从左到右:当一个类有多个父类时,按照从左到右的顺序搜索。

这个搜索顺序可以通过 __mro__ 属性或 mro() 方法查看。例如:

print(D.__mro__)
# (<class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)

理解好继承顺序的逻辑,可以帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三相两电平逆变器的Simulink仿真建模及SPWM

三相两电平逆变器的介绍 三相两电平逆变器的电路结构如下图所示&#xff0c;作为非常基本的电力电子电路&#xff0c;众多教科书中均有对该电路的原理介绍&#xff0c;本文不再对原理进行赘述&#xff0c;主要目的在于提供simulink仿真电路。下图即为三相两电平逆变器电路结构…

图文并茂:解析Spring Boot Controller返回图片的三种方式

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 图文并茂&#xff1a;解析Spring Boot Controller返回图片的三种方式 前言使用Base64编码返回图片使用byte数组返回图片使用Resource对象返回图片图片格式转换与性能对比 前言 在互联网的世界里&…

AI雷达智能销售名片小程序源码系统+企业商城+公司动态 带完整的安装代码包以及安装搭建教程

在数字化时代&#xff0c;企业的销售模式正在经历一场深刻的变革。为了更好地满足市场需求&#xff0c;提升销售效率&#xff0c;罗峰给大家分享一款集AI雷达智能销售名片、企业商城、公司动态于一体的源码系统。该系统不仅配备了完整的安装代码包&#xff0c;还附有详细的安装…

批量自定义重命名,一键添加顺序编号,文件夹管理更高效!

我们经常需要对文件夹进行管理和整理。然而&#xff0c;当面对大量需要改名的文件夹时&#xff0c;手动逐个修改不仅效率低下&#xff0c;还容易出错。那么&#xff0c;有没有一种方法能够批量自定义重命名文件夹&#xff0c;并在名称后自动添加顺序编号呢&#xff1f;答案是肯…

Makefile解析(ARM LINLON V5/V7 VPU firmware tools例)

根目录Makefile 初始化一些变量 TARGETS : model executiontb cpu ROOT_DIR?$(abspath $(CURDIR)) OUT_DIR?$(abspath $(CURDIR)) ADDR_FILE:$(ROOT_DIR)/build/mmu_addr.txtmake all 执行 make help all: help.PHONY后面跟的目标都被称为伪目标&#xff0c;也就是说我们 mak…

ABC352编程笔记

ABC352 编程笔记 题意&#xff1a;输入&#xff0c;四个数 a , b , c , d a,b,c,d a,b,c,d&#xff0c;若 d d d 在 c , d c,d c,d 之间&#xff0c;则输出 Yes&#xff0c;否则输出 No。 正解&#xff1a;直接判断。 #include <bits/stdc.h> //#define int long lo…

【学习笔记】软件工程概述

简介 程序是人们为了完成特定的功能编制的一组指令集&#xff0c;它由计算机的语言描述&#xff0c;并且能在计算机系统上执行。而软件不仅包括程序&#xff0c;还包括程序的处理对象——数据&#xff0c;以及与程序开发、维护和使用相关的图文资料。 软件有以下几个特点&…

vscode正则匹配技巧

写正则表达式 下面是匹配加粗的单词或空格 \*\*[a-zA-Z\s]*\*\*vscode提取加粗的内容 altenter&#xff0c;再ctrlC复制选中的内容出来

DDD面试题:DDD聚合和表的对应关系是什么 ?(来自蚂蚁面试)

尼恩说在前面&#xff1a; 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如字节、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; DDD 的外部接口调用&#xff0c;应该放在…

flask 前后台文件多张图片传递api;AIGC streamlit、gradio多图片页面展示

1、flask 前后台文件多张图片api send_file 传递zip: send_file(zip_data, mimetype=‘application/zip’, as_attachment=True, download_name=‘images.zip’) from flask import Flask, Response, request,send_file from PIL import Image import torch import io from …

React的JSX使用入门案例

01 入门案例 1、引入react的依赖&#xff1a;<script src"./static/react18.3.1/react.development.js"></script> 2、引入react-dom的依赖&#xff1a;<script src"./static/react18.3.1/react-dom.development.js"></script> …

【项目申报】2024年西安市科技企业孵化器认定和申报条件、扶持政策须知

第一章 总 则 第一条 为营造激励自主创新的环境&#xff0c;加快科技成果转化&#xff0c;培育科技型中小企业&#xff0c;发展高新技术产业&#xff0c;促进西安市科技企业孵化器&#xff08;以下简称“孵化器”&#xff09;健康发展&#xff0c;努力建设创新型郴州&#xf…

AI绘画工具介绍

在科技日新月异的今天&#xff0c;AI绘画工具以其独特的魅力和无限的可能性&#xff0c;正在逐渐改变着我们对绘画的认知和创作方式。本文将详细介绍AI绘画工具的概念、原理、应用场景、优势与局限性&#xff0c;以及未来发展趋势&#xff0c;带您领略科技与艺术完美融合的奇妙…

深入了解二叉搜索树:原理、操作与应用

文章目录 二叉搜索树二叉搜索树的操作1.查找操作2.插入操作3.查找最大值或者最小值4.删除操作5.前序中序后序遍历 总结 二叉搜索树 形如上图的二叉树就是二叉搜索树&#xff0c;接下来我们来具体阐述一下什么是二叉搜索树。 二叉搜索树的概念&#xff1a;满足左子树的值小于根…

经济学SSCI期刊,中科院3区,IF=2+,难度不大,收稿范围广泛!

一、期刊名称 Information Economics and Policy 二、期刊简介概况 期刊类型&#xff1a;SSCI 学科领域&#xff1a;经济学 影响因子&#xff1a;2.8 中科院分区&#xff1a;3区 出版方式&#xff1a;订阅模式/开放出版 版面费&#xff1a;选择开放出版需支付$3190 三、…

C++ | Leetcode C++题解之第78题子集

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> t;vector<vector<int>> ans;void dfs(int cur, vector<int>& nums) {if (cur nums.size()) {ans.push_back(t);return;}t.push_back(nums[cur]);dfs(cur 1, nums);t.po…

yum仓库和NFS网络共享服务

一、yum 1.1yum的定义 yum是一个基于RPM包&#xff0c;构建的软件更新机制&#xff0c;能够自动解决软件包之间的依赖关系。解决了日常工作中的大量查找安装依赖包的时间 为什么会有依赖关系的发生 因为linux本身就是以系统简洁为自身优势&#xff0c;所以在安装操作系统的时…

Docker与Harbor:构建企业级私有Docker镜像仓库

目录 引言 一、本地私有仓库 &#xff08;一&#xff09;基本概述 &#xff08;二&#xff09;搭建本地私有仓库 1.下载registry镜像 2.启动容器 3.上传本地镜像 4.客户端下载镜像 二、Harbor简介 &#xff08;一&#xff09;什么是 Harbor &#xff08;二&#xff…

苹果15能用哪些充电宝?充电宝什么牌子好?好用充电宝排名

随着移动设备的普及和功能的不断强大&#xff0c;我们对于充电宝的需求也越来越高。尤其是对于苹果15用户来说&#xff0c;选择一款兼容性好、性能稳定的充电宝显得尤为重要。在市面上众多充电宝品牌中&#xff0c;如何选择适合苹果15的充电宝&#xff1f;究竟哪个牌子的充电宝…

在线扭蛋机小程序:商家稳占市场的新突破口

近几年&#xff0c;扭蛋机进入了爆发期&#xff0c;动漫、游戏的发展更是推动了市场的发展&#xff0c;我国扭蛋机正在蓬勃发展中。 不过&#xff0c;在市场规模扩大下&#xff0c;扭蛋机行业的竞争力也在同时加大&#xff0c;企业商家需要在市场竞争中寻求发展新思路&#xf…