MRO,C3算法
1了解python2和python3类的区别
python2在2.4之前使用的是经典类, 2.4之后, 使用的是新式类 class Foo:
pass class Foo(object):
pass MRO: method resolution order 方法的查找顺序 class Base:
pass class Base1:
def chi():
pass class Bar(Base, Base1):
pass b = Bar() # Bar -> Base -> Base1
b.chi() 2. 经典类的MRO 树形结构的深度优先遍历 -> 树形结构遍历 3. 新式类的MRO C3算法(难点, 重点)
1. 拆分
2. 合并 用头和身体比较
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 M:
pass
class N(M):
pass
class P(E, A):
pass
class X:
pass
class Q(P,N,X):
pass
class G(Q, F):
pass
class H(G, F):
pass # L(A) = A
# L(B) = B + L(A) + A
# L(C) = C + L(A) + A
# L(D) = D + L(B) + L(C) + BC
# L(E) = E + L(C) + L(A) + CA
# L(F) = F + L(D) + L(E) + DE
# L(M) = M
# L(N) = N + L(M) + M
# L(P) = P + L(E) + L(A) + EA
# L(X) = X
# L(Q) = Q + L(P) + L(N) + L(X) +PNX
# L(G) = G + L(Q) + L(F) + QF
# L(H) = H + L(G) + L(F) + GF
#
#
# L(A) = A
# L(B) = B + L(A) + A # BA
# L(C) = C + L(A) + A # CA
# L(D) = D + L(B) + L(C) + BC # DBCA
# L(E) = E + L(C) + L(A) + CA # ECA
# L(F) = F + L(D) + L(E) + DE # FDBECA
# L(M) = M
# L(N) = N + L(M) + M # NM
# L(P) = P + L(E) + L(A) + EA # PECA
# L(X) = X
# L(Q) = Q + L(P) + L(N) + L(X) +PNX # QPECANMX
# L(G) = G + L(Q) + L(F) + QF # GQPFDBECANMX
# L(H) = H + L(G) + L(F) + GF # HGQPFDBECANMX
MRO,C3算法的更多相关文章
- python学习笔记:第20天 多继承、MRO C3算法
目录 一.多继承 二.旧式类的MRO 三.新式类的MRO 四.super 一.多继承 之前已经学习过了继承,当出现了x是⼀种y的的时候,就可以使⽤继承关系,即"is-a" 关系.在 ...
- MRO C3算法 super的运用
-------------态度决定成败,无论情况好坏,都要抱着积极的态度,莫让沮丧取代热心.生命可以价值极高,也可以一无是处,随你怎么去选择.# --------------------------- ...
- python 面向对象(六)MRO C3算法 super
########################总结################ 面向对象回顾 类:对某一个事物的描述,对一些属性和方法的归类 class 类名: var=123#类变量 def ...
- python --- 21 MRO C3算法
一.python2.2之前用的是 经典类的MRO继承 ①深度递归继承 从左到右 ,一条路走到黑 ②广度继承 一层一层的继承 深度继承时 为 R 1 2 3 4 ...
- 21 MRO C3算法
三十九 MRO 多继承的继承顺序 一.python2.2之前用的是 经典类的MRO继承 ①深度递归继承 从左到右 ,一条路走到黑 ②广度继承 一层一层的继承 深度继承时 ...
- day19 MRO C3算法 super()
1. MRO(Method Resolution Order):方法解析顺序,主要用于在多继承时判断调的属性的路径(来自于哪个类). 1.Python语言包含了很多优秀的特性,其中多重继承就是其中之一 ...
- python MRO:C3算法
http://www.codeweblog.com/python-mro-c3%E7%AE%97%E6%B3%95/ 在 python 2.2 之后,python 实现了一个新的MRO算法:C3算法, ...
- Python之MRO及其C3算法
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>] (<class '__main_ ...
- python之MRO和C3算法
python2类和python3类的区别pyhon2中才分新式类与经典类,python3中统一都是新式类Python 2.x中默认都是经典类,只有显式继承了object才是新式类python 3.x中 ...
随机推荐
- Python人工智能之路 - 第二篇 : 算法实在太难了有现成的直接用吧
本节内容 预备资料: 1.FFmpeg: 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w6hk 2.baidu-aip: pip ins ...
- Vertical-align + 表单
Vertical-align 垂直对齐方式 定义行内元素的基线相对于该元素所在的基线的垂直对齐. inline inline-clock img图片标签具有,块级元素没有. vertical-alig ...
- Linux磁盘挂载
mount命令 用于加载文件系统到指定的加载点.此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Lin ...
- 18-10-08 对Excel 表格添加颜色
#-*- coding:utf-8 -*-#首先注意一个问题 pycharm 中路径符号和Linux 系统一样向左import xlwt def add_color(): #实例化对象 增加sheet ...
- HTML5:表格相关标记及其属性
表格相关标记及其属性 <table>:表格,包括以下属性 属性 说明 width 宽度(有像素和百分比两种表示方法) height 高度(有像素和百分比两种表示方法) border 边框粗 ...
- Linq中的左连,右连,内连
1.左连接: var LeftJoin = from emp in ListOfEmployeesjoin dept in ListOfDepartmenton emp.DeptID equals d ...
- 渲染标签 - v-html
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title ...
- Win下更新pip出现OSError:[WinError17]与PerrmissionError:[WinError5]及解决
环境:Win7 64位,python3.6.0 我在准备用pip装东西的时候,在cmd里先更新了一下pip,大概是9.0.1更新到9.0. 尝试更新pip命令: pip install --upgra ...
- [笔记]_ELVE_正则表达式
本文章转载至简书技匠,简书签约作者,技匠,以上内容欢迎大家分享到朋友圈/微博等. 正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑. ...
- Django 数据库迁移
Django 数据库迁移 DATABASES = { # Django默认配置使用sqlite3数据库 # 'default': { # 'ENGINE': 'django.db.backends.s ...