首页 > 编程语言 >python中的多继承理解

python中的多继承理解

时间:2024-03-22 15:59:27浏览次数:23  
标签:__ .__ Base1 python self 继承 init 理解 父类

  在python的多继承中,父类的初始化顺序遵循所谓方法解析顺序(Method Resolution Order,MRO)的机制。python使用C3线性化算法来确定多继承类的MRO:

  1. 目标:创建一个一致的线性继承顺序,同时保持父类的相对顺序和子类优先原则。

  2. 子类优先:子类总是在其父类之前出现。从而子类可以重写父类的方法或属性。

  3. 从左到右的顺序:在多继承类时,指定的父类顺序决定了它们在 MRO 中的优先级,会首先查找靠左的父类中的方法或属性。

  4. 每个类只处理一次:确保在复杂的继承体系中,每个类的方法或属性只被考虑一次。

  关于如下代码:

class Base1:
    def __init__(self, a):
        self.a = a
        print("Base1 initialized", a)

class Base2:
    def __init__(self, a):
        self.a = a
        print("Base2 initialized", a)

class Child(Base1, Base2):
    def __init__(self, a=1, b=2):
        super(Child, self).__init__(a)
        super(Base1, self).__init__(b)
        # Base1.__init__(self, a)
        # Base2.__init__(self, b)

c = Child()

  其中Child类多继承了Base1和Base2,而Base2和Base2都需要传入一个参数。代码中列举了两种方式来初始化Child类:

  1、super(class, self).__init__(a)通过MRO的顺序找到传入class的下一个类来进行初始化。比如super(Child, self).__init__(a),实际上是将a传入Child的下一个类,即Base1。对Base1进行初始化,并保存到self中。super(Base1, self).__init__(b)则是将b传入Base2对其进行初始化。

  2、文中注释的代码class.__init__(self, a),通过显式的方式对父类class进行初始化,此时Base1.__init__(self, a)就是将a传入Base1对其进行初始化。这种方式相较于super更容易理解,但需要自行控制好初始化的顺序。此外,这种方式可以无需把父类写在子类的类名括号中,也能实现对父类方法和属性的继承。当然这实际上等于复制了父类的属性和方法,而并没有继承的关系,从而不能利用到继承关系的一些python特性,如isinstance()方法的调用等。

  要查看某个类的MRO,可使用class.__mro__。

标签:__,.__,Base1,python,self,继承,init,理解,父类
From: https://www.cnblogs.com/qizhou/p/18089614

相关文章

  • Python函数每日一讲12 - len()
    引言在Python编程中,经常会遇到需要获取对象的长度或者元素个数的情况。而len()函数就是用来返回对象的长度或者元素个数的。通过本文的介绍,你将学习到len()函数的基本用法以及在实际应用中的一些技巧,帮助你更好地利用这一函数解决问题。语句概览len()函数用于返回对象的长度或......
  • 如何理解SW8110Q搭配UWB使用的功率放大器
    SW8110Q是一个搭配DW1000使用的前端模块(FEM),具有完全集成的功率放大器(PA)和低噪声放大器(LNA)。SW8110Q不需要外部匹配组件,降低了组装复杂性和PCB面积,实现了经济高效的解决方案。SW8110Q实现了高发射功率、低收发切换损耗。所有这些特性使SW8110Q成为UWBFEM的绝佳选择,因为它以......
  • C#_继承_多态_抽象类_虚方法_密封类_静态类
    文章目录前言类的继承继承类的构造函数子类访问父类访问修饰符测试多态_函数重载多态_运算符重载可重载与不可重载的运算符抽象类虚方法new和override密封类和静态类结构体上期习题答案本期习题前言C#是面向对象的编程语言,面向对象编程的四项基本原则:抽象:将......
  • Python实战:爬取小红书-采集笔记详情
    上一篇文章发出后,有读者问能不能爬到小红书笔记详情数据,今天他来了。一、先看效果程序输入:在一个txt文件内粘贴要爬取的笔记链接,每行放1个链接。程序输出:输出是一个所有笔记详情数据的excel表格,包含”采集日期、作者、笔记标题、发布日期、IP属地、点赞数、收藏数、......
  • native 关键的理解
    使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++等非Java语言实现的,并且被编译成了DLL,由java去调用。(1)为什么要用native方法java使用起来非常方便,然而有些层次的任务用java实现起来不容易,或者我们对程序的效率很在意时,问题就来了。例如:有时java应......
  • Python和Pycharm在windows环境下的安装
    Python和Pycharm在windows环境下的安装找到python:登录官网www.python.org在主页找到Downloads选择对应电脑系统---->找到你要下载的版本下载即可找到Pycharm:登录网站https://www.jetbrains.com/pycharm/download/#section=windows---->开发人员选项---->pycharm---->选择......
  • 完全理解ARM启动流程:Uboot-Kernel
    内容共计5W+字数,但是我还是很多地方说的不够尽兴。那么下次聊!前言bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。PC机上引导程序一般由BIOS开始执行,然后读取硬盘中位于MBR(MainBootRecord,主引导记录)中的Bootload......
  • ssm/php/node/python学生社团管理系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在现代教育体系中,学生社团活动被视为校园文化的一个重要组成部分,它不仅丰富了学生的校园生活,还提供了一个平台让学生能够在实践中学习和发展个人兴趣。......
  • ssm/php/node/python音乐节购票系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表 系统的选题背景和意义选题背景音乐节作为一种集文化、艺术与娱乐于一体的大型活动,在全球范围内享有广泛的欢迎度。随着人们生活水平的提升和对精神文化生活追求的加深,音乐节不仅仅......
  • ssm/php/node/python医疗陪诊系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在现代社会,随着生活节奏的加快和工作压力的增大,人们在面对健康问题时往往感到无助。尤其是当患者需要在医院接受治疗时,复杂的医疗流程、专业的医疗术语......