欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python-37章 MRO

程序员文章站 2022-07-15 16:30:59
...
Python2和Python3之间的区别

Python2.4之前使用的是经典类,2.4之后使用的是新式类
经典类继承

MRO method resolution order 方法的查询顺序

经典类的MRO : 树形结构的深度优先遍历

执行过程中会依次从左到右,深度递归,向上寻找继承关系,依次顺藤摸瓜找上去
Python-37章 MRO
此时的执行顺序:G->C->A->B->F->D->E
从左向右依次寻找.并且经典类不会重复寻找,深度优先会先将一条分支走到头,然后再去找下一个分支.
由于现在已经淘汰了Python2,所以了解下就好

新式类的MRO: C3算法

Python不存在广度优先,并且广度优先是很慢的

拆分
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的 MRO
'''
Python3中所有的类都默认继承object
    设求MRO的算法是L
    L(H) = H + L(G) + L(F) + GF
    L(G) = G + L(E) + E
    L(E) = E + L(C) + L(A) + CA
    L(C) = C + L(A) + A
    L(A) = A
    L(F) = F + L(D) + L(E) + DE
    L(D) = D + L(B) + L(C) + BC
    L(B) = B + L(A) + A
    
    加法:merge()
    DBCA + ECA => D
    # 拿第一项的第一位和后面每项的除了第一位进行比较,如果没有出现,则该位元素被算出
    BCA + ECA => B
    #如果出现了,此时,继续开始下一项的第一位(第一项的C在第二项出现了,开始第二项的第一位,但是第二项后面没有了,输出E)
    CA + ECA => E
    CA + CA => CA

'''
合并