一:super的使用

class Person(object):
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex class Student(Person):
def __init__(self, name, age, sex):
super().__init__(name, age, sex) python3中的写法 表示调用父辈的__init__, 完成初始化
self.score = 0 lisi = Student('李四', 20, '女')
print(lisi.name) 注:
python2写法 表示调用父辈的__init__, 完成初始化
super(Student, self).__init__(name, age, sex) 指名道姓的调用父类的方法 跟继承没有关系 调用类中的__init__函数,完成对self的初始化
Person.__init__(self, name, age, sex) python3中的写法 表示调用父辈的__init__, 完成初始化
super().__init__(name, age, sex)

二:super之mro列表牵引出c3算法

print(C.__mro__)
结果:(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>) class A:
def test(self):
print('from A.test')
super().test() ————》到B--->object c3线性算法 class B:
def test(self):
print('from B') class C(A, B):
pass c = C()
c.test() 结果: from A.test from B
牵扯到mro列表
print(C.__mro__)
结果:(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>) 顺序 c3线性算法 为了实现继承,python会在mro列表从左往右开始查找基类,直到找到第一个匹配这个属性的类为止
而这个mro列表是通过一个c3线性算法来实现的,我们不去深究这个算法的数学原理,它实际上就是合并所以父类的mro列表并遵循如下三条
1.子类会先余父类被检查
2.多个父类会根据他们在列表的顺序被检查
3.如果对下一个类存在两个合法选择,选择第一个父类

三:mro列表总结使用

1.到我们碰倒super 难以分析
使用print(C.mro())
打印查找顺序:[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
获取super的顺序流程
class B:
def test(self):
print('B---->test') def aaa(self):
print('B---->aaa') class A:
def test(self):
print('A---->test')
super().aaa() class C(A, B):
def aaa(self):
print('C----->aaa') c = C()
c.test() 打印结果: 'A---->test B---->aaa
print(C.mro()) 打印查找顺序:[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]

super之mro列表牵引出c3算法的更多相关文章

  1. python多继承下的查找顺序-MRO原则演变与C3算法

    在python历史版本中的演变史 python2.2之前: MRO原则: 只有经典类,遵循深度优先(从左到右)原则, 存在的问题:在有重叠的多继承中,违背重写可用原则 解决办法是再设计类的时候不要设计 ...

  2. 子类中执行父类的方法(引出super()与mro列表)

    1. 我们先想一下在python中如果子类方法中想执行父类的方法,有什么方式?大概有三种: Parent.__init__(self, name) # 通过父类的名字,指定调用父类的方法 super( ...

  3. python学习笔记:第20天 多继承、MRO C3算法

    目录 一.多继承 二.旧式类的MRO 三.新式类的MRO 四.super 一.多继承 之前已经学习过了继承,当出现了x是⼀种y的的时候,就可以使⽤继承关系,即"is-a" 关系.在 ...

  4. C3算法 和 super

    一. Python的继承  多继承 子类继承父类. 继承是为了节省开发时间.提高开发效率 代码得到了重(chong)用 一个类可以拥有多个父类 lass shen_xian: # 定义一个神仙类 de ...

  5. python小兵 面向对象继承super和c3算法

    python多继承 在前面的学习过程中. 我们已经知道了Python中类与类之间可以有继承关系. 当出现了x是一种y的的时候. 就可以使⽤继承关系. 即"is-a" 关系. 在继承 ...

  6. MRO和C3算法

    本节主要内容: 1.python多继承 2.python经典类的MRO 3.python新式类的MRO,C3算法 4.super() 一.python多继承 在python中类与类之间可以有继承关系, ...

  7. Python-MRO和C3算法

    一. python多继承 在前面的学习过程中,我们已经知道了python中类与类之间可以有继承关系,当出现x是一种y的时候就可以使用继承关系.即'is-a'关系,在继承关系中子类自动拥有父类中除了私有 ...

  8. day19 MRO C3算法 super()

    1. MRO(Method Resolution Order):方法解析顺序,主要用于在多继承时判断调的属性的路径(来自于哪个类). 1.Python语言包含了很多优秀的特性,其中多重继承就是其中之一 ...

  9. MRO C3算法 super的运用

    -------------态度决定成败,无论情况好坏,都要抱着积极的态度,莫让沮丧取代热心.生命可以价值极高,也可以一无是处,随你怎么去选择.# --------------------------- ...

随机推荐

  1. 【LeetCode】290. Word Pattern 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. 【LeetCode】647. Palindromic Substrings 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:暴力循环 方法二:固定起点向后找 方法三:动 ...

  3. 洛谷 P3431:[POI2005]AUT-The Bus(离散化+DP+树状数组)

    题目描述 The streets of Byte City form a regular, chessboardlike network - they are either north-south o ...

  4. C# 使用阿里云发送短信

    最近有个项目,短信服务使用的是阿里云的,由于时间问题,没有手动去构造sign去发送,而是直接使用阿里云的SDK发送,所以这里算是做个笔记,或许以后还能用得到 首先,我们需要安装阿里云的SDK,推荐使用 ...

  5. 图像数据到网格数据-2——改进的SMC算法的实现

    概要 本篇接上一篇继续介绍网格生成算法,同时不少内容继承自上篇.上篇介绍了经典的三维图像网格生成算法MarchingCubes,并且基于其思想和三角形表实现了对样例数据的网格构建.本篇继续探讨网格生成 ...

  6. centos6.5搭建LAMP

    实验前准备    (1)service iptables stop   #关闭防火墙       service iptables status   #查看防火墙是否已经关闭       iptabl ...

  7. 如何用微信小程序,每天给自己赚个鸡腿?

    假期如果实在无聊的话,那跟随田同学的脚步上架一个小程序吧. 话说:谁不想拥有一个自己的小程序呢?既可以赚点小钱又可以长长见识. 不懂小程序的小白能不能做出来呢?那来对了,这个教程就是针对小白的. 今天 ...

  8. OpenIddict 登录及详细流程解析

    GitHub上实例都是集成了Identity来实现,我这里去掉了相关东西,实现自定义的登录满足自己的结构要求 服务端配置添加数据库服务以及定时任务服务 builder.Services.AddDbCo ...

  9. win10 安装vue 详解-包括node.js、npm、webpack

    1.下载 去官网下载 node.js https://nodejs.org/en/download/ 一般不会选择最新的,我安装的是 12.18.4 进入历史记录页面网址 https://nodejs ...

  10. Java复制文件用数据流方法,renameTO()方法是相当于剪切操作

    我想达到的效果是,一个文件复制到另一个地方,然后重命名 //判断是否存在 File file = new File("D:/tomcat9.0.12/apache-tomcat-9.0.12 ...