zoukankan      html  css  js  c++  java
  • 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. 合并

    用头和身体比较
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    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

      

     
     
  • 相关阅读:
    理解volatile与synchronized
    实现任意两个数的互换
    增删改查+部分前段内容
    Hibernate知识点小结汇总
    Spring知识点小结(一)
    JDBC相关
    Redis工具之Jedis
    Hibernate知识点小结(四)--JPA
    Hibernate知识点小结(三)-->一对多与多对多配置
    Hibernate知识点小结(二)
  • 原文地址:https://www.cnblogs.com/heheda123456/p/10204827.html
Copyright © 2011-2022 走看看