Python多继承mro示例
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示例相关推荐
- Python多继承mro
在python语言里是支持继承这一概念的,也就是一个class可以继承一些其他class方法或者数据,在继承的时候有的比较简单,比如下面这段代码就是classM继承了classA class A(): ...
- python 多继承与super使用详解_继承中的MRO与super详解
Python进阶-继承中的MRO与super 写在前面如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,super ...
- python中的MRO与多继承
相关概念: MRO:Method Resolution Order,即方法解析顺序,是python中用于处理二义性问题的算法 二义性: python支持多继承,多继承的语言往往会遇到以下两类二义性的问 ...
- Python - 多继承与MRO
(一)多继承 网上关于多继承.MRO和C3算法的讲解比较多,在此不再赘述. 我们可以利用类的__mro__ 属性或者 mro() 方法查看某个类的MRO列表(方法调用顺序). (二)经典案例 当执 ...
- Python的继承多态
Python的继承多态 文章目录 Python的继承多态 一.私有属性和私有方法 01. 应用场景及定义方式 02. 伪私有属性和私有方法 二.单例 01. 单例设计模式 单例设计模式的应用场景 02 ...
- python基础 继承
继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父 ...
- python面向对象继承_Python 面向对象 --- 继承
目标 单继承 多继承 面向对象三大特性 1,封装 根据 职责 将 属性 和 方法 封装 到以抽象的 类 中 2,继承 实现代码的重用,相同的代码不需要重复的缩写 3,多态 不同的对象调用相同的方法,产 ...
- python PHP 多进程,python多进程的用法示例(代码)
本篇文章给大家带来的内容是关于python多进程的用法示例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. python多线程适合IO密集型场景,而在CPU密集型场景,并不能充 ...
- python多继承顺序及分配,python多继承的查找顺序是什么?
1.查找顺序 (1)本地优先,自己定义或重写的方法优先.本地没有的,按照继承列表,从左往右查找: (2)单调性,所有子类,也要满足查找顺序.也就是说 A 继承 B C,A 会先找 B 再找 C.但是在 ...
最新文章
- 命令行接口(CLI)将被取而代之,它不再是网络运维的主要工具
- iReport使用方法
- mac设置linux环境,如何在mac或者linux配置oh-my-zsh
- jquery鼠标滑过展示图片时显示详情
- windows与linux中的路径书写,斜杠、反斜杠用法总结
- servlet的体系结构
- 【JOURNAL】集花酒联
- JAVA设计模式--简单介绍
- 高级文件系统管理——Linux基本命令(15)
- Django APIView源码解析
- 碳酸钡颗粒行业调研报告 - 市场现状分析与发展前景预测
- sql按年、月、日、查询排序
- loop 逻辑门如何使用for_for..loop详解
- 解决安装多个Xcode出现的PBXProjectWizardChooserWizard问题
- C/C++ C# unity Python 帮助文档 书籍 学习资料
- 公司估值:格雷厄姆的公司价值评估模型及应用——成长估值(一)
- 计算机怎么发音乐,有哪些方法可以把歌曲发送到远方的朋友的手机上?
- uiautomatorviewer 定位提示Error obtaining UI hierarchy
- 视频监控在安防市场比重大 技术发展引出商机
- 计算机颜色偏蓝,电脑整个屏幕颜色不正常偏蓝怎么调回正常颜色?
热门文章
- VTK:vtkCompositePolyDataMapper2用法实战
- OpenCASCADE绘制测试线束:数据交换命令之XDE 通用命令
- boost::hana::for_each用法的测试程序
- boost::fusion::result_of::empty用法的测试程序
- GDCM:gdcm::Parser的测试程序
- ITK:对多个线程上的数据进行操作以利用多核处理器
- VTK:Utilities之CameraModifiedEvent
- Qt Creator设置3D组件属性
- C语言打印字符串的所有排列组合(附完整源码)
- OpenGL Draw TransformFeedback 绘制变换反馈的实例