python面向对象(C3算法)(六)
发布时间:2019-08-20 16:59

1. 了解python2和python3类的区别

  python2在2.3之前使用的是经典类, 2.3之后, 使用的是新式类

2. 经典类的mro 树形结构的深度优先遍历 - 树形结构遍历

class a:
 pass
class b:
 pass
class c:
 pass
class d:
 pass
class e:
 pass
class f:
 pass
class g:
 pass
class h:
 pass
class foo:
 pass

从左到右,深度递归,一直到头再返回

foo - h - g - d - b - a - c - e

3. 新式类的mro c3算法

拿第一项的第一位和 后面每项的除了第一位比较. 如果没有出现, 则该位元素算出如果出现了. 此时开始下一项的第一位继续和后面每一项的除了第一位比较:

 

  用头和身体比较

方法:  1. 拆分

 

  2. 合并

class a:
 pass
class b:
 pass
class c:
 pass
class d:
 pass
class e:
 pass
class f:
 pass
class g:
 pass
class h:
 pass
l = h + l + l + gf # eca + dbeca = hgfdbecao
l = g + l + e # geca
l = e + l + l + ca # eca
l = c + l + a # ca
l = a
l = f + l + l + de # fdbeca
l = d + l + l + bc # dbca
l = b + a + a # ba
与python中使用h.__mro__运行的结果相同









4. super 找mro顺序的下一个

 

class base1:
 def chi:
 super.chi 
 print
class base2:
 def chi:
 super.chi
 print
class base3:
 def chi:
 print
class bar:
 def chi:
 print
 super.chi 
 print
b = bar

结果 :bar里chi1,base3,base2,base1,bar里chi2

服务热线
在线咨询