多继承之MRO
一,python2和python3的区别
在python2中存在两种类:一个叫经典类,在python2.2之前,一直用的是经典类,经典类如果在基类的根什么都不写,那么它就是根;还有一个叫新式类,在python2.2之后出现的,新式类的特点就是所有基类的根都是object。
在python3中只存在新式类,所以所有类的根都是object。
二,经典类的MRO
在经典类中的MRO是采用深度优先遍历方法,我们需要通过画图的方式解决比较复杂的题,然后再通过从左往右,一条路走到底的方式找出MRO。


我们创建一个FOO类的对象,它的MRO就是FOO,H,G,F,D,B,A,C,E
二,新式类的MRO,即C3算法


右边即推算过程,有L(H)=H+L(G)+L(X)+L(F)+GXF的方式一直往上走,到最后推到L(A)=A为止,然后把结果反带回去,即L(B)=BA,直到推到L(H)=HGPMXFDBECANO,在整个过程中,只用前面头和后面的身体比较,身体中没有就出来,有就跳过。也可以用类名.__mro__来获得类的MRO信息。
四,super()
super()可以帮我们执行MRO中下一个父类的方法,通常super()使用的两个地方:
1,可以访问父类的构造函数
2,可以调用父类(MRO)中方法

面试题


多继承之MRO的更多相关文章
- 面向对象:静态属性,静态方法,组合,继承,衍生,继承之mro线性顺序列表,面向对象综合实例
1.静态属性(附有装饰器) class Room: def __init__(self,name,owner,width,length,height): self.name=name self.own ...
- Python多继承之MRO算法
MRO即Method Resolution Order 方法解析顺序,它的提出主要是为了解决Python中多继承时,当父类存在同名函数时,二义性的问题 下面先看一个例子: import inspe ...
- python基础之面向对象的多继承以及MRO算法
内容梗概: 1. python多继承 2. python经典类的MRO 3. python新式类的MRO C3算法 1.python多继承 class Shen: def fly(self): pri ...
- 第二十天- 多继承 经典MRO 新式MRO super()
# 多继承:# 在继承关系中.⼦类自动拥有⽗类中除私有属性外其他所有内容.python⽀持多继承.子类可拥有多⽗类. class ShenXian: # 神仙 def fei(self): print ...
- python学习笔记:第20天 多继承、MRO C3算法
目录 一.多继承 二.旧式类的MRO 三.新式类的MRO 四.super 一.多继承 之前已经学习过了继承,当出现了x是⼀种y的的时候,就可以使⽤继承关系,即"is-a" 关系.在 ...
- python的多继承C3(mro)算法
多继承的继承顺序按照C3算法进行顺序继承 例一 按照深度A类从左往右有三条可继承的"路" 先按照深度优先的算法,将每一路的每一个节点加到列表中 B = [B,D,F,H] C = ...
- PythonI/O进阶学习笔记_3.2面向对象编程_python的继承(多继承/super/MRO/抽象基类/mixin模式)
前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第二篇 继承. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...
- 多继承以及MRO顺序
class A: def test(self): print("A --- test方法") def demo(self): print("A --- demo方法&qu ...
- Python的多继承问题-MRO和C3算法
大部分内容转载自C3 线性化算法与 MRO 理解Python中的多继承 Python 中的方法解析顺序(Method Resolution Order, MRO)定义了多继承存在时 Python 解释 ...
随机推荐
- 别人的Linux私房菜(8)Linux磁盘与文件系统管理
虚拟机的磁盘通常为:/dev/vd[a-p] LVM和软件磁盘阵列 software RAID可以将一个分区格式化为多个文件系统或者多个分区格式化为一个文件系统. 索引式文件系统中:如ext2.ext ...
- S 实现精确加减乘除
//加法函数 function accAdd(arg1, arg2) { var r1, r2, m; try { r1 = arg1.toString().split(".")[ ...
- Windows平台下载Android源码(整理)
Google官方下载源码使用的系统Ubuntu系统,不过现在我们需要在Windows系统中下载Android源码文件. 网站的地址是:https://android.googlesource.com/ ...
- 内置函数_map()、reduce()、filter()
map().reduce().filter() map()内置函数把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过 ...
- Python 装饰器(笔记,非原创)
定义:本质是函数,为其他函数添加附加功能原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式知识储备: 1.函数即“变量” 2.高阶函数 ...
- google guava Multimap的学习介绍
1.https://blog.csdn.net/gongxinju/article/details/53634434
- java之LinkedList详细介绍
1 LinkedList介绍 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作.Linke ...
- 自动化测试之数据库操作pymysql
1.下载并导入pymysql 2.配置参数连接mysql db = pymysql.connect(**config) config = { 'host': str(host), 主机地址 'user ...
- JS特效实现微博评论逻辑
实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
前几天写了一篇 Java 8 即将在 2019 年停止免费向企业提供更新的文章,企图迫使用户向更新一代的 Java 版本升级,但让人遗憾的是,小编今天收到了 Oracle Java 版本的升级推送,装 ...