Python多继承mro示例

以下是python方法解析顺序的示例,详细的解释见代码的注释部分。

# 1 解释python mro的执行顺序,详见数字序号的顺序
class Base(object):def __init__(self): # 11. 进入 Base.__init__print("enter Base") # 12. 打印 enter Baseprint("leave Base") # 13. 打印 leave Base
class A(Base):def __init__(self): # 5. 进入 A.__init__print("enter A") # 6. 打印 enter A# 7. 这里将分为两步执行# 7.1 执行 c.__class__.mro()_# 7.2 返回 MRO 列表中的第三个元素,也就是 Bsuper(A, self).__init__()print("leave A") # 15. 打印 leave Aclass B(Base):def __init__(self): # 8. 进入 B.__init__print("enter B") # 9. 打印 enter B# 10. 这里将分为两步执行# 10.1 执行 c.__class__.mro()_# 10.2 返回 MRO 列表中的第四个元素,也就是 Basesuper(B, self).__init__()print("leave B") # 14. 打印 leave Aclass C(A, B):def __init__(self):  # 2. 实例 C ,会进入 __init__print("enter C")  # 3. 打印 enter C# 4. 这里将分为两步执行# 4.1 执行 c.__class__.mro()# 4.2 返回 MRO 列表中的第二个元素,也就是 Asuper(C, self).__init__()print("leave C") # 16. 打印 leave Ac = C()  # 1. 首先代码会从这里开始执行。
print(c.__class__.mro())"""
enter C
enter A
enter B
enter Base
leave Base
leave B
leave A
leave C
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.Base'>, <class 'object'>]
"""# 2 这里需要特殊说明,python3里的super其实是mro里的“super”,而不是按照子类的supper顺序走。
class BaseClass:num_base_calls = 0def call_me(self):print("Calling method on Base Class")self.num_base_calls += 1class LeftSubclass(BaseClass):num_left_calls = 0def call_me(self):super().call_me()print("Calling method on Left Subclass")self.num_left_calls += 1class RightSubclass(BaseClass):num_right_calls = 0def call_me(self):super().call_me()print("Calling method on Right Subclass")self.num_right_calls += 1class Subclass(LeftSubclass, RightSubclass):num_sub_calls = 0def call_me(self):super().call_me()print("Calling method on Subclass")self.num_sub_calls += 1s = Subclass()
s.call_me()
print(s.__class__.mro())'''
Calling method on Base Class
Calling method on Right Subclass
Calling method on Left Subclass
Calling method on Subclass
[<class '__main__.Subclass'>, <class '__main__.LeftSubclass'>, <class '__main__.RightSubclass'>, <class '__main__.BaseClass'>, <class 'object'>]'''

Python多继承mro示例相关推荐

  1. Python多继承mro

    在python语言里是支持继承这一概念的,也就是一个class可以继承一些其他class方法或者数据,在继承的时候有的比较简单,比如下面这段代码就是classM继承了classA class A(): ...

  2. python 多继承与super使用详解_继承中的MRO与super详解

    Python进阶-继承中的MRO与super 写在前面如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,super ...

  3. python中的MRO与多继承

    相关概念: MRO:Method Resolution Order,即方法解析顺序,是python中用于处理二义性问题的算法 二义性: python支持多继承,多继承的语言往往会遇到以下两类二义性的问 ...

  4. Python - 多继承与MRO

    (一)多继承 网上关于多继承.MRO和C3算法的讲解比较多,在此不再赘述. 我们可以利用类的__mro__ 属性或者 mro() 方法查看某个类的MRO列表(方法调用顺序).   (二)经典案例 当执 ...

  5. Python的继承多态

    Python的继承多态 文章目录 Python的继承多态 一.私有属性和私有方法 01. 应用场景及定义方式 02. 伪私有属性和私有方法 二.单例 01. 单例设计模式 单例设计模式的应用场景 02 ...

  6. python基础 继承

    继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父 ...

  7. python面向对象继承_Python 面向对象 --- 继承

    目标 单继承 多继承 面向对象三大特性 1,封装 根据 职责 将 属性 和 方法 封装 到以抽象的 类 中 2,继承 实现代码的重用,相同的代码不需要重复的缩写 3,多态 不同的对象调用相同的方法,产 ...

  8. python PHP 多进程,python多进程的用法示例(代码)

    本篇文章给大家带来的内容是关于python多进程的用法示例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. python多线程适合IO密集型场景,而在CPU密集型场景,并不能充 ...

  9. python多继承顺序及分配,python多继承的查找顺序是什么?

    1.查找顺序 (1)本地优先,自己定义或重写的方法优先.本地没有的,按照继承列表,从左往右查找: (2)单调性,所有子类,也要满足查找顺序.也就是说 A 继承 B C,A 会先找 B 再找 C.但是在 ...

最新文章

  1. 命令行接口(CLI)将被取而代之,它不再是网络运维的主要工具
  2. iReport使用方法
  3. mac设置linux环境,如何在mac或者linux配置oh-my-zsh
  4. jquery鼠标滑过展示图片时显示详情
  5. windows与linux中的路径书写,斜杠、反斜杠用法总结
  6. servlet的体系结构
  7. 【JOURNAL】集花酒联
  8. JAVA设计模式--简单介绍
  9. 高级文件系统管理——Linux基本命令(15)
  10. Django APIView源码解析
  11. 碳酸钡颗粒行业调研报告 - 市场现状分析与发展前景预测
  12. sql按年、月、日、查询排序
  13. loop 逻辑门如何使用for_for..loop详解
  14. 解决安装多个Xcode出现的PBXProjectWizardChooserWizard问题
  15. C/C++ C# unity Python 帮助文档 书籍 学习资料
  16. 公司估值:格雷厄姆的公司价值评估模型及应用——成长估值(一)
  17. 计算机怎么发音乐,有哪些方法可以把歌曲发送到远方的朋友的手机上?
  18. uiautomatorviewer 定位提示Error obtaining UI hierarchy
  19. 视频监控在安防市场比重大 技术发展引出商机
  20. 计算机颜色偏蓝,电脑整个屏幕颜色不正常偏蓝怎么调回正常颜色?

热门文章

  1. VTK:vtkCompositePolyDataMapper2用法实战
  2. OpenCASCADE绘制测试线束:数据交换命令之XDE 通用命令
  3. boost::hana::for_each用法的测试程序
  4. boost::fusion::result_of::empty用法的测试程序
  5. GDCM:gdcm::Parser的测试程序
  6. ITK:对多个线程上的数据进行操作以利用多核处理器
  7. VTK:Utilities之CameraModifiedEvent
  8. Qt Creator设置3D组件属性
  9. C语言打印字符串的所有排列组合(附完整源码)
  10. OpenGL Draw TransformFeedback 绘制变换反馈的实例