学习笔记,仅供参考,有错必究


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相关推荐

  1. python学习高级篇(part10)--类对象的特殊方法和特殊属性

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__del__()` 类对象的特殊方法之`__getattr__()` 类对象的特殊方法之`__getitem__ ...

  2. python学习高级篇(part9)--对象的引用计数

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__str__()` 类对象的特殊方法之`__new__()` 对象的引用计数 什么是引用计数 对象的引用计数加1 ...

  3. python学习高级篇(part8)--类对象的特殊方法

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__iter__()`和`__next__()` 类对象的特殊方法之`__add__()`和`__radd__() ...

  4. python学习高级篇(part7)--特殊属性和特殊方法

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 特殊属性和特殊方法 获取对象的信息之特殊属性`__dict__` 获取对象的信息之反射 类对象的特殊方法`__len__()` pyt ...

  5. python学习高级篇(part2)--类方法,静态方法,访问控制

    学习笔记,仅供参考,有错必纠 学习资源:图解python 文章目录 类方法 举个例子 静态方法 举个例子 访问控制 举个例子 举个例子 举个例子 类方法 类方法指的是类对象中使用装饰器@classme ...

  6. python学习高级篇(part1)--类属性

    学习笔记,仅供参考,有错必纠 学习资源:图解python 文章目录 类属性 举个例子 举个例子 类属性 类属性指的是类对象所绑定的属性. 绑定类属性(给类对象绑定属性)的方式有两种: 在类对象的内部( ...

  7. python学习高级篇(part6)--内置函数dir

    学习笔记,仅供参考,有错必纠 内置函数dir 对于类对象或实例对象,可以调用内置函数dir()获得其所有可以访问的属性和方法(包括从父类中继承的属性和方法)的列表. 类对象与实例对象的结果是有区别的, ...

  8. python学习高级篇(part5)--内置函数type

    学习笔记,仅供参考,有错必纠 内置函数type 内置函数type()用于获得指定对象的类型,比如:实例对象的类型是其对应的类对象. 举个例子 代码: class MyClass(object):pas ...

  9. python学习高级篇(part4)--内置函数issubclass和isinstance

    学习笔记,仅供参考,有错必纠 文章目录 issubclass()函数 举个例子 isinstance()函数 举个例子 issubclass()函数 内置函数issubclass()用于判断类对象与类 ...

最新文章

  1. asp实现UNIX时间戳功能
  2. 黑暗城堡-(最小生成树+最短路)
  3. mysql中的钱null,mysql 中null总结
  4. 哈工大机器人 王猛_人物特写:“去年一年,我就飞了160多次”——哈工大机器人集团“80后”执行总裁成长小记...
  5. 【深度学习】ICCV2021|性能优于何恺明团队MoCo v2,DetCo:为目标检测定制任务的对比学习...
  6. JavaScript实现使用DisjointSet 检测无向循环算法(附完整源码)
  7. mybatis plus 事务管理器_[MyBatis]-02 环境搭建及配置文件详解
  8. php返回一个变量,PHP从另一个文件获取变量
  9. Docker教程小白实操入门(14)--如何使用CMD和ENTRYPOINT指令指定容器启动时要运行的命令
  10. 学生管理系统java源代码_java学生管理系统源代码
  11. mysql 实现over函数_mysql 中如何实现over 方法(开窗函数)
  12. extjs 中时间控件中 时分秒
  13. 使用python进行北京二手房信息数据分析及可视化展示
  14. 电脑主机需要清洁么,多久清理一次比较好?
  15. 消息称,用户已收到华为 HarmonyOS 2.0 开发者公测版推送
  16. XCTF 攻防世界 MISC杂项 高手进阶区
  17. Lifecycle, LifecycleOwner, LifecycleObserver类讲解
  18. 在前端页面生成二维码并下载(兼容IE)
  19. STM32使用库函数控制时钟芯片DS1302提供时间
  20. 木老师教笨笨课堂——系列讲座(从函数指针到委托) 二、C语言里的函数指针...

热门文章

  1. spark 常用函数介绍(python)
  2. CentOS下面ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
  3. ASSERT: “QGLFunctions::isInitialized(d_ptr)“ - Runtime Exception
  4. 5.4 加权最小二乘法
  5. 天池大赛, Storm
  6. python代码删掉了几行怎么撤回_78行Python代码实现现微信撤回消息功能
  7. 商品表有哪些字段_面试中有哪些经典的数据库问题?
  8. Oracle报错:类型长度大于最大值解决办法
  9. 超出部分用省略号显示 以及 bootStrapTable 的属性一览表
  10. nginx长连接出现504的解决办法