python学习高级篇(part3)--MRO
学习笔记,仅供参考,有错必究
MRO
MRO的全称是Method Resolution Order(方法解析顺序),它指的是对于一颗类继承树,当调用最底层类对象所对应实例对象的方法时,Python解释器在类继承树上搜索方法的顺序。
对于一棵类继承树,可以调用最底层类对象的方法mro()
或访问最底层类对象的特殊属性__mro__
,获得这棵类继承树的MRO.
举个例子
代码:
class A(object):def f(self):print("A.f")class B(A):def f(self):print("B.f")class C(A):def f(self):print("C.f")class D(B, C):passprint(D.mro())print(D.__mro__)d = D()
d.f()
输出:
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
B.f
在子类重写后的方法中通过super()
调用父类中被重写的方法时,在父类中搜索方法的顺序基于
以该子类为最底层类对象的类继承树的MRO.
如果想调用指定父类中被重写的方法,可以给super()
传入两个实参:super(a_type, obj)
,其中第一个实参a_type
是个类对象,第二个实参obj
是个实例对象,这样,被指定的父类是:
obj
所对应类对象的MRO中,a_type
后面那个类对象。
举个例子
代码:
class A(object):def f(self):print("A.f")class B(A):def f(self):print("B.f")class C(A):def f(self):print("C.f")class D(B, C):def f(self):#super().f() #super(D, self).f() super(B, self).f() # super(C, self).f() d = D()
d.f()
输出:
C.f
python学习高级篇(part3)--MRO相关推荐
- python学习高级篇(part10)--类对象的特殊方法和特殊属性
学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__del__()` 类对象的特殊方法之`__getattr__()` 类对象的特殊方法之`__getitem__ ...
- python学习高级篇(part9)--对象的引用计数
学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__str__()` 类对象的特殊方法之`__new__()` 对象的引用计数 什么是引用计数 对象的引用计数加1 ...
- python学习高级篇(part8)--类对象的特殊方法
学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__iter__()`和`__next__()` 类对象的特殊方法之`__add__()`和`__radd__() ...
- python学习高级篇(part7)--特殊属性和特殊方法
学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 特殊属性和特殊方法 获取对象的信息之特殊属性`__dict__` 获取对象的信息之反射 类对象的特殊方法`__len__()` pyt ...
- python学习高级篇(part2)--类方法,静态方法,访问控制
学习笔记,仅供参考,有错必纠 学习资源:图解python 文章目录 类方法 举个例子 静态方法 举个例子 访问控制 举个例子 举个例子 举个例子 类方法 类方法指的是类对象中使用装饰器@classme ...
- python学习高级篇(part1)--类属性
学习笔记,仅供参考,有错必纠 学习资源:图解python 文章目录 类属性 举个例子 举个例子 类属性 类属性指的是类对象所绑定的属性. 绑定类属性(给类对象绑定属性)的方式有两种: 在类对象的内部( ...
- python学习高级篇(part6)--内置函数dir
学习笔记,仅供参考,有错必纠 内置函数dir 对于类对象或实例对象,可以调用内置函数dir()获得其所有可以访问的属性和方法(包括从父类中继承的属性和方法)的列表. 类对象与实例对象的结果是有区别的, ...
- python学习高级篇(part5)--内置函数type
学习笔记,仅供参考,有错必纠 内置函数type 内置函数type()用于获得指定对象的类型,比如:实例对象的类型是其对应的类对象. 举个例子 代码: class MyClass(object):pas ...
- python学习高级篇(part4)--内置函数issubclass和isinstance
学习笔记,仅供参考,有错必纠 文章目录 issubclass()函数 举个例子 isinstance()函数 举个例子 issubclass()函数 内置函数issubclass()用于判断类对象与类 ...
最新文章
- asp实现UNIX时间戳功能
- 黑暗城堡-(最小生成树+最短路)
- mysql中的钱null,mysql 中null总结
- 哈工大机器人 王猛_人物特写:“去年一年,我就飞了160多次”——哈工大机器人集团“80后”执行总裁成长小记...
- 【深度学习】ICCV2021|性能优于何恺明团队MoCo v2,DetCo:为目标检测定制任务的对比学习...
- JavaScript实现使用DisjointSet 检测无向循环算法(附完整源码)
- mybatis plus 事务管理器_[MyBatis]-02 环境搭建及配置文件详解
- php返回一个变量,PHP从另一个文件获取变量
- Docker教程小白实操入门(14)--如何使用CMD和ENTRYPOINT指令指定容器启动时要运行的命令
- 学生管理系统java源代码_java学生管理系统源代码
- mysql 实现over函数_mysql 中如何实现over 方法(开窗函数)
- extjs 中时间控件中 时分秒
- 使用python进行北京二手房信息数据分析及可视化展示
- 电脑主机需要清洁么,多久清理一次比较好?
- 消息称,用户已收到华为 HarmonyOS 2.0 开发者公测版推送
- XCTF 攻防世界 MISC杂项 高手进阶区
- Lifecycle, LifecycleOwner, LifecycleObserver类讲解
- 在前端页面生成二维码并下载(兼容IE)
- STM32使用库函数控制时钟芯片DS1302提供时间
- 木老师教笨笨课堂——系列讲座(从函数指针到委托) 二、C语言里的函数指针...
热门文章
- spark 常用函数介绍(python)
- CentOS下面ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- ASSERT: “QGLFunctions::isInitialized(d_ptr)“ - Runtime Exception
- 5.4 加权最小二乘法
- 天池大赛, Storm
- python代码删掉了几行怎么撤回_78行Python代码实现现微信撤回消息功能
- 商品表有哪些字段_面试中有哪些经典的数据库问题?
- Oracle报错:类型长度大于最大值解决办法
- 超出部分用省略号显示 以及 bootStrapTable 的属性一览表
- nginx长连接出现504的解决办法