• 对于单继承直接调用__init__与super无异,主要是针对菱形继承

对于直接使用init调基类

class A:def __init__(self):print('A')class B(A):def __init__(self):A.__init__(self)print('B')class C(A):def __init__(self):A.__init__(self)print('C')class D(B, C):def __init__(self):B.__init__(self)C.__init__(self)print('D')
if __name__ == '__main__':o = D()
  • 输出
A
B
A
C
D

结论
劣势:

  1. 需要手动去编写父类的继承关系
  2. 针对菱形继承出现了底层公共类被重复构造的问题

使用super去构造基类

class A:def __init__(self):print('A')class B(A):def __init__(self):super(B, self).__init__()print('B')class C(A):def __init__(self):super(C, self).__init__()print('C')class D(B, C):def __init__(self):super(D, self).__init__()print('D')if __name__ == '__main__':o = D()
  • 输出:
A
C
B
D
···
> 结论
> 优势:
> 1. 只需要传入类type,则根据继承关系自动调用基类函数
> 2. 避免了重复构造底层公共类
  • mro
print(D.__mro__)
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)

super继承关系接近mro

python supper菱形继承相关推荐

  1. Python中菱形继承的MRO顺序及property属性

    Python中菱形继承的MRO顺序及property属性 文章目录 Python中菱形继承的MRO顺序及property属性 一.Python中菱形继承的MRO顺序 1. 单独调用父类的方法 2. 多 ...

  2. 类的继承,派生,组合,菱形继承,多态与多态性

    类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...

  3. Python基础教程:菱形继承问题

    一.类的分类 1.1 新式类 继承了object的类以及该类的子类,都是新式类 Python3中所有的类都是新式类 1.2 经典类 没有继承object的类以及该类的子类,都是经典类 只有Python ...

  4. python的继承用法_python之继承中组合用法与菱形继承关系查找法

    1.什么是组合 组合就是一个类的对象具备某一属性,该属性的值是指向另外外一个类的对象 2.为什么用组合 组合也是用来解决类与类之间代码冗余问题 3.用法 class Course:           ...

  5. 利用python画钻石_python入门 -- 钻石继承(菱形继承)

    在面向对象(OOP)编程中,很多情况下会遇到多继承和多重继承的问题和坑,这里带对大家 认识一下其中的一个钻石继承(菱形继承)的问题. 什么时候会出现钻石继承(菱形继承)呢? 当在类树中,由多个类共享同 ...

  6. Python菱形继承的初始化问题和继承顺序

    Python菱形继承的初始化问题和继承顺序 Python中,类通过继承的方式,子类可以获得父类的非私有属性和非私有方法,不需要自己再重新实现. 继承可以多层继承,即可以多代继承.也可以多继承,即一个子 ...

  7. php 魔术方法 多继承,day23:单继承多继承菱形继承__init__魔术方法

    原文:https://www.cnblogs.com/libolun/p/13434675.html 单继承 关于继承的一些基本概念 1.什么是子类?什么是父类?如果一个类继承另外一个类,该类叫做子类 ...

  8. Python高级——多继承问题(super与mro)

    多继承问题 1.单独调用父类: 一个子类同时继承自多个父类,又称菱形继承.钻石继承. 使用父类名.init(self)方式调用父类时: 例: class Parent(object):def __in ...

  9. python画菱形的代码_python画棱形

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 实际中解这类题我们可以画x*y的菱形手动画路径,但我们可以用程序模拟这一过程,下 ...

最新文章

  1. py文件 添加模块映射_Python模块的定义,模块的导入,__name__用法实例分析
  2. linux-Centos 7下bond与vlan技术的结合
  3. 委托、Lambda表达式和事件
  4. [Python]使用 lambda 函数
  5. 用python玩转数据慕课答案第三周_大学慕课用Python玩转数据答案公众号
  6. win10安装时有个修复计算机,win10出现故障,在安全模式下安装Windows更新,彻底修复问题...
  7. 从零开始学架构2 - 高性能篇
  8. 网易易盾最新一代Java2c加固究竟有什么厉害之处?
  9. QML 自定义鼠标光标
  10. 使用 wizNote 作为 Metaweblog 客户端 在博客园发布博客
  11. cad导出pdf_如何使用CAD手机看图软件将DWG格式图纸文件转换成PDF格式?
  12. 二极管ss14测量_开关二极管怎么测量好坏
  13. xLua热更新(二)实现热更新
  14. Redis数据类型汇总
  15. vue+axios以流的形式下载文件
  16. 直播答题html,H5实现直播答题可能吗?
  17. jenkins+git+gradle配置自动打apk包
  18. android MapBox地图基于openstreetmap开发
  19. MES系统的应用价值
  20. mip-html自动跳转页面,百度MIP技术快速入门(上)

热门文章

  1. MSELoss() 函数
  2. 2020 年度开发工具 Top 100
  3. Godaddy服务器上关于ASP.NET网站建设一些经验 - 防SQL注入攻击(三)
  4. 通过面向对象实现猫狗大战案例
  5. 线程同步,互斥 事件 和关键代码的比较
  6. Mybatis错误——Could not find resource com/kuang/dao/UserMapper.xml
  7. win10系统无法连接xp工作组计算机,win10系统看不到windows xp系统主机上工作组的具体教程...
  8. 运营管理整改报告范文_快递整改报告怎么写
  9. 金碟软件资产负债表中JC,JD,DY,DC表示的是什么
  10. Java实现一个简单的日历表