Python语言高级实战-内置函数super()的使用之类的多继承(附源码和实现效果)

news2024/9/30 19:36:33

实现功能

super()函数的调用顺序是按照方法解析顺序(Method Resolution Order, MRO)来确定的。MRO 是一个确定继承顺序的算法,它使用 C3 线性化算法来避免潜在的方法冲突。Python会根据继承顺序自动计算 MRO,我们只需要使用 super() 来调用父类的方法即可。

假设A、B、C、D四个类分别是一下的继承关系:

图片

实现代码

# 实例一:
class A(object):
    def __init__(self):
        print("class ---- A ----")

class B(A):
    def __init__(self):
        print("class ---- B ----")
        super(B, self).__init__()

class C(A):
    def __init__(self):
        print("class ---- C ----")
        super(C, self).__init__()


# 实例一
class D(B, C):
    def __init__(self):
        print(D.__mro__)
        print("class ---- D ----")
        super(D, self).__init__()
d = D()
'''
#输出结果:
class ---- D ----
class ---- B ----
class ---- C ----
class ---- A ----
'''

# 实例二
class D(B, C):
    def __init__(self):
        print("class ---- D ----")
        super(B, self).__init__()
d = D()
'''
#输出结果:
class ---- D ----
class ---- C ----
class ---- A ----
'''

# 实例三
class D(B, C):
    def __init__(self):
        print("class ---- D ----")
        super(C, self).__init__()
d = D()
'''
# 输出结果:
class ---- D ----
class ---- A ----
'''

实现效果

  • __mro__是一个元组,类D的__mro__顺序是  D -> B -> C -> A -> object。

  • 实例一中,在类D中调用super()函数时传入的第一个参数是D,那么super()函数就会在__mro__ 里从D的上一级开始查找,它的上一级是B, 那么super(D, self).__init__() 就调用B的__init__()函数,B的__init__()函数里又调用了B的super()函数,super(B, self).__init__(),那就从B的上一级再开始查找,B的上一级是C, 以此类推,然后是A,最后是object。于是实例一也就解释清楚了。

  • 实例二中,类D的super() 方法第一个参数传入的是B ,那么根据__mro__顺序开始查找,B的上一级是C,C的上一级是A,所以实例二的打印顺序是 D - > C -> A

  • 实例三读者可以自行理解验证。

写在后面

本人读研期间发表5篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,对Python有一定认知和理解,会结合自身科研实践经历不定期分享关于python、机器学习、深度学习等基础知识与应用案例。

致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。

1、邀请三个朋友关注本订阅号或2、分享/在看任意订阅号的三篇文章即可在后台联系我获取相关数据集和源码

2、关注“数据杂坛”公众号,点击“领资料”即可免费领取资料书籍。

3、如果对本文有疑问,或者有论文指导的相关需求,点击“联系我”添加作者微信直接交流。

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

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

相关文章

人人都会的 Blazor —— 1.3 项目结构

项目结构 使用 Visual Studio 2022 创建 Blazor 项目。 在搜索框中输入【blazor】关键字,将列出以下已经存在的项目模板: Blazor Server App:基于 Blazor Server 托管模型的项目,并建立一些示例代码和组件;Blazor WebAssembly App:基于 Blazor WebAssembly 托管模型的项…

CSS 外边距、填充、分组嵌套、尺寸

一、CSS 外边距: CSS margin(外边距)属性定义元素周期的空间。margin清除周围的(外边框)元素区域。margin没有背景颜色,是完全透明的。margin可以单独改变元素的上、下、左、右边距,也可以一次改…

响应式招标投标网站模板源码带后台

模板信息: 模板编号:29165 模板编码:UTF8 模板分类:博客、文章、资讯、其他 适合行业:招标类企业 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手工书写DIVCSS&a…

Python基础入门(5)----Python中的变量和表达式:变量的定义、赋值和数据类型转换

文章目录 Python中的变量和表达式:变量的定义、赋值和数据类型转换变量的定义变量的赋值数据类型转换注意事项表达式总结Python中的变量和表达式:变量的定义、赋值和数据类型转换 Python是一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。在Python编程中,变量和表…

arcgis 批量删除Table中的某些Field

当shp或者table文件较少时,可以手动删除每个文件中的某些字段,当文件较多时,就需要使用arcpy或者model进行处理。

字节测试开发岗面试竟如此简单...

前言 因为读者里有不少刚入门测试的同学,这两天抽空整理了一份字节测试开发岗的面试题答案,说实话这个题目真挺简单的,如果你面大厂碰到此类面试题,也算是运气很好啦。大家也可以先自测一下,看看自己能不能答上来。 如…

图片文件过大怎么压缩?五种压缩方法大全

图片文件过大怎么压缩?不知道大家有没有遇到过这样的尴尬情况,当我们将一些图片上传到某个网站的时候,被提示图片大小操作了网站的限制而被禁止上传,我相信很多人都遇到过吧,其实这是网站的一张防御措施,防…

aosp定制android系统

目录 AOSP 准备工作(配置) 确定机型和版本 初始化 git安装 curl安装 同步源码 环境变量 创建aosp目录 指定同步版本 解下来安装编译需要的依赖 编译aosp源码 刷入系统 AOSP 全称 Android Open Source Project 是指Android开源项目,它是由Google主导的…

【Java】BMI身体质量指数计算工具

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍BMI身体质量指数计算工具的Java实现。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

服装和纺织品在欧盟和英国售卖需要做哪些认证?REACH认证、EN14682认证

近期,不少亚马逊卖家在欧洲和应该售卖纺织品和服装都遇到了安全问题,下架的理由都是不符合产品安全的要求,下架邮件有以下几种: ①标签不合规 ②不符合安全标准 那么,纺织品出口到欧盟和英国,具体有哪些要…

智能井盖传感器功能,万宾科技产品介绍

在国家治理方面,对社会的治理是一个重要的领域,一定要在推进社会治理现代化过程中提高市政府的管理和工作能力,推动社会拥有稳定有序的发展。在管理过程中对全市井盖进行统一化管理,可能是市政府比较头疼的难题,如果想…

新开普智慧校园系统RCE漏洞 [附POC]

文章目录 新开普智慧校园系统RCE漏洞 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 新开普智慧校园系统RCE漏洞 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试&#x…

某集团营销、制造多公司业财一体核算整体流程图(ODOO15/16)

某集团旗下有销售公司、加工制造厂、原料生产厂等多家公司,此类型公司从客户订单到完成交货,业务环节相对复杂,业务单据多,出纳银行收付款流水多、对象多,难以正确核销,跟单部难以全面了解订单进度&#xf…

【亲测推荐】魔方财务和魔方云系统开源全解密

简介 资源入口点击进入 众所周知,魔方财务现在官方售价299,那么接下来就是带来开心版,详细手写实测安装教程已经放在付费资源中 展示 > 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?fromarticle_bottom) 发布!

大数据之LibrA数据库系统告警处理(ALM-12029 license文件失效)

告警解释 系统在安装集群后和每天零点检查当前系统中的license文件是否失效(即当前集群中导入的license文件的节点数是否超限,license文件是否过期)。如果license文件失效,产生该告警。 当license文件有效时,告警恢复…

Java使用FTP连接到NAS读取文件信息,并将文件信息变成单向树形结构设置到对象中

检测NAS是否启用的FTP连接模式 如果这里不启用会出现下面错误提示&#xff1a; MalformedServerReplyException: Could not parse response code. Server Reply: SSH-2.0-OpenS 使用依赖 <dependency><groupId>commons-net</groupId><artifactId>comm…

【高德地图API】JS高德地图实现点标连线,高德地图实现点跟点连线,高德地图实现连线

前言 高德地图API参考&#xff1a;https://lbs.amap.com/demo/javascript-api/example/marker/custom-icon 实现各个点标的经纬度连线&#xff0c;点击点标可查看内容&#xff08;自定义的&#xff09; 效果 实现 案例实现&#xff0c;复制粘贴&#xff0c;将安全密钥和key替…

个性化联邦学习-综述

介绍阅读的三篇个性化联邦学习的经典综述文章 Three Approaches for Personalization with Applications to Federated Learning 论文地址 文章的主要内容 介绍了用户聚类&#xff0c;数据插值&#xff0c;模型插值三种个性化联邦学习的方法。 用户聚类&#xff1a; 目的&a…

工作四年,我学会了用 Idea本地调试线上服务器代码

文章目录 工作四年&#xff0c;我学会了用 Idea本地调试线上服务器代码&#x1f4c6; 一.那些辛酸的过往&#x1f4d5;二.远程debug原理远程调试分类主动连接调试&#xff1a;被动连接调试&#xff1a; &#x1f44b;三.操作步骤3.1.准备一个简单springboot程序 例如helloworld…

【带头学C++】----- 三、指针章 ---- 3.11 补充重要指针知识

1.指针的指针&#xff08;多级指针&#xff09; 指针的指针&#xff08;Pointer to Pointer&#xff09;是指一个指向指针的指针变量。也就是说&#xff0c;它存储了一个指向指针的内存地址。在C中&#xff0c;指针的指针可以用来传递多个指针参数&#xff0c;或者用于在函数内…