1.python经典类的MRO

经典类的MRO

class A: pass class B(A): pass class C(A): pass class D(B, C): pass class E: pass class F(D, E): pass class G(F, D): pass class H: pass class Foo(H, G): pass

enter description here

2. python新式类的MRO, C3算法

新式类的MRO

class A: pass class B(A): pass class C(A): pass class D(B, C): pass class E(C, A): pass class F(D, E): pass class G(E): pass class H(G, F): pass

首先. 我们要确定从H开始找. 也就是说. 创建的是H的对象.

如果从H找. 那找到H+H的?类的C3, 我们设C3算法是L(x) , 即给出x类. 找到x的MRO

L(H) = H + L(G) + L(F)

继续从代码中找G和F的?类往??带

L(G) = G + L(E)

L(F) = F + L(D)+ L(E)

继续找E 和 D

L(E) = E + L(C) + L(A)

L(D) = D + L(B) + L(C)

继续找B和C

L(B) = B + L(A)

L(C) = C + L(A)

最后就剩下一个A了. 也就不用再找了. 接下来. 把L(A) 往回带. 再推回去. 但要记住. 这?的

表示的是merge. merge的原则是?每个元组的头一项和后一元组的除头一项外的其他元

素进行比较, 看是否存在. 如果存在. 就从下一个元组的头一项继续找. 如果找不到. 就拿出来.

作为merge的结果的一项. 以此类推. 直到元组之间的元素都相同. 也就不?再找了.

L(B) =(B,) + (A,) -> (B, A)

L(C) =(C,) + (A,) -> (C, A)

继续带.

L(E) = (E,) + (C, A) + (A) -> E, C, A

L(D) = (D,) + (B, A) + (C, A) -> D, B, A

继续带.

L(G) = (G,) + (E, C, A) -> G, E, C, A

L(F) = (F,) + (D, B, A) + (E, C, A) -> F, D, B, E, C, A

加油,

算完了. 最终结果 HGFDBECA. 那这个算完了. 如何验证呢? 其实python早就给你准备好

了. 我们可以使用类名.__mro__获取到类的MRO信息

print(H.__mro__)

结果:

(, , ,

‘__main__.D‘>, , , ,, )

3. super是什么?

super()可以帮我们执行MRO中下一个父类的方法. 通常super()有两个使用的地方:

可以访问父类的构造方法

当子类方法想调用父类(MRO)中的方法

方法一

class Foo: def __init__(self, a, b, c): self.a= a

self.b = b

self.c = c

class Bar(Foo): def __init__(self, a, b, c, d): super().__init__(a, b, c) # 访问父类的构造方法 self.d= d

b = Bar(1, 2, 3, 4)

print(b.__dict__)

结果:

{‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 4}

方法二

class Foo: def func1(self): super().func1() # 此时找的是MRO顺序中下?个类的func1()方法 print("我的家. 就住在这个屯") class Bar: def func1(self): print("你的家. 不在这个屯") class Ku(Foo, Bar): def func1(self): super().func1() # 此时super找的是Foo print("他的家. 不知道在哪个屯") k= Ku() # 先看MRO . KU, FOO, BAR object

k.func1()

k2 = Foo() # 此时的MRO. Foo object

k2.func1() # 报错

python mro c3_Python 19 MRO和C3算法相关推荐

  1. python mro c3_Python的MRO以及C3线性化算法

    python3 中的方法解析顺序 (Method Resolution Order , MRO)采用C3线性化算法来确定 (百度Python MRO排在首位的文章,绝大部分内容是正确的,但是核心公式错 ...

  2. python mro c3_python的MRO和C3算法

    classA:pass classB(A):pass classC(A):pass classD(B, C):pass classE(C, A):pass classF(D, E):pass clas ...

  3. python新式类c3算法_Python 新式类继承关系的 C3 算法(Python 2.3 的方法解析顺序,MRO)...

    Python 新式类继承关系的 C3 算法(Python 2.3 的方法解析顺序,MRO) 翻译:刘硕 摘要:本文档面向于想要了解Python 2.3版本中 C3 方法解析顺序的 Python程序开发 ...

  4. python新式类c3算法_python中的MRO和C3算法

    一. 经典类和新式类 1.python多继承 在继承关系中,python子类自动用友父类中除了私有属性外的其他所有内容.python支持多继承.一个类可以拥有多个父类 2.python2和python ...

  5. python mro c3_绝地求生辅助_Python的多继续问题-MRO和C3算法

    博弈论--两人取子游戏与威佐夫博弈,隐藏在背后的黄金分割dnf辅助Python 中的方式剖析顺序(Method Resolution Order, MRO)界说了多继续存在时 Python 注释器查找 ...

  6. python新式类c3算法_Python新式类的方法解析顺序MRO与Super

    新式类与经典类的方法解析顺序 MOR(方法解析顺序) 经典类:深度优先 DFS python3以前 新式类:广度优先 python2.2 新式类:广度优先的C3算法实现(拓扑排序) BFS pytho ...

  7. python全栈开发103_python全栈开发day103-python垃圾回收机制、mro和c3算法解析、跨域jsonp\CORS、Content-Type组件...

    Python垃圾回收 -- 引用计数 -- Python为每个对象维护一个引用计数 -- 当引用计数为0的 代表这个对象为垃圾 -- 标记清除 -- 解决孤立的循环引用 -- 标记根节点和可达对象 - ...

  8. MRO的计算(C3算法及应用)

    在程序中出现了多个类的继承而且出现了菱形继承,并且又要用到super,知道MRO就显得极为重要,我们使用C3算法来计算MRO 下面通过例子来解释: class A:pass class B(A):pa ...

  9. 继承,经典类与新式类的MRO,C3算法,super

    #继承 class JiaoFu:def qd(self):print("教父带你祈祷") class Fu:def msj(self):print("alex喜欢msj ...

最新文章

  1. 链表的排序(Python和C实现)
  2. 最全面的linux信号量解析
  3. MariaDB 数据库索引详解(9)
  4. 微信小程序tabBar导航栏页和其他页执行onLoad与onShow时机;tabBar页获取不到参数问题;navigateTo跳转无效问题;onShow执行两次问题;
  5. 前端学习(2830):条件渲染
  6. 2006年上半年开发心得
  7. IMDB-WIKI人脸属性数据集解析,dob matlab序列号转为出生日期
  8. 作为移动开发程序员,腾讯3轮面试都问了Android事件分发,分享PDF高清版
  9. np.dot、np.outer、np.matmul、np.multipy、np.inner、np.outer与np.cross几个函数之间的区别
  10. 导航鼠标悬停变色--H5+css
  11. Ubalun电动牙刷拆卸及内部刨析
  12. 排名下降 流量减少 动态评分 服务 违规降权后,如何恢复搜索权重?
  13. 一个高手的趋势交易、量化交易系统思路
  14. python123新版个人所得税计算_Python 小案例 计算个人所得税
  15. 灵感1-把歌曲(mp3等)转换乐谱(简谱、五线谱)等
  16. K线类型识别—双K线之买入型双日K线组合
  17. 卷积云神经网络_卷积神经网络
  18. RT-thread应用讲解——通过U盘升级程序固件
  19. 中小企业如何面对红海蓝海的管理信息化?
  20. 阿里云服务器ECS通用型g5和ECS通用型g6实例区别在哪?如何选择?

热门文章

  1. 论文浅尝 - AAAI2020 | 多模态基准指导的多模态自动文摘
  2. 论文浅尝 | 利用知识图谱嵌入和图卷积网络进行长尾关系抽取
  3. 领域应用 | 从本体论开始说起——运营商关系图谱的构建及应用
  4. 机器学习常用的算法整理:线性回归、逻辑回归、贝叶斯分类、支持向量机、K-means聚类、决策树、随机森林以及常用的应用场景整理
  5. CV模型,全目标检测等
  6. shell-awk详细笔记
  7. 淘淘相关工具类【json,httpClient,id,FTP,exception,cookie(包括共享cookie的设置等)】
  8. UVA3942 Remember the Word
  9. 《面向对象程序设计》课程作业二
  10. C语言scanf函数奇遇记