zoukankan      html  css  js  c++  java
  • python 之C3算法

    C3算法只要针对的Python2.3版本之后出现的新式类MRO(method resolution order) -------继承方法查询顺序;而经典类MRO则遵循的是深度优先遍历(树形结构)

      (1)如图所示,经典类MRO算法

        

                MRo结果为G-->(E-->A-->B)-->(H)-->(F-->C--->D)

                  该结果是不带括号的,为了方便显示算法顺序,故意加的括号,::::从左至右,一条道走到黑.

         (2)新式类

          (1)查分:

            例如

    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,

    ⾸首先. 我们要确定从H开始找. 也就是说. 创建的是H的对象.
    如果从H找. 那找到H+H的⽗父类的C3, 我们设C3算法是L(x) , 即给出x类. 找到x的MRO
    L(H) = H + L(G) + L(F) + GF
    继续从代码中找G和F的⽗父类往⾥里里⾯面带
    L(G) = G + L(E) + E
    L(F) = F + L(D)+ L(E) + DE
    继续找E 和 D
    L(E) = E + L(C) + L(A) + CA
    L(D) = D + L(B) + L(C) + BC
    继续找B和C
    L(B) = B + L(A) + A
    L(C) = C + L(A) + A

    最后就剩下⼀一个A了了. 也就不⽤用再找了了. 接下来. 把L(A) 往⾥里里带. 再推回去. 但要记住. 这⾥里里的
    + 表⽰示的是merge. merge的原则是⽤用每个元组的头⼀一项和后⾯面元组的除头⼀一项外的其他元
    素进⾏行行比较, 看是否存在. 如果存在. 就从下⼀一个元组的头⼀一项继续找. 如果找不到. 就拿出来.
    作为merge的结果的⼀一项. 以此类推. 直到元组之间的元素都相同. 也就不⽤用再找了了.

          (2)合并:

    L(B) =(B,) + (A,) + (A) -> (B, A)
    L(C) =(C,) + (A,) + (A) -> (C, A)
    继续带.
    L(E) = (E,) + (C, A) + (A) + (C,A) -> E, C, A
    L(D) = (D,) + (B, A) + (C, A) + (B, C) -> D, B, C, A
    继续带.
    L(G) = (G,) + (E, C, A) + (E) -> G, E, C, A
    L(F) = (F,) + (D, B, C, A) + (E, C, A) + (D, E)-> F, D, B, E, C, A
    加油, 最后了了
    L(H) = (H, ) + (G, E, C, A) + ( F, D, B, E, C, A) + (G, F) -> H, G, F, D, B, E, C, A
     
     
     
    另外super()
        super(Base,self).func()   意思为:从Base类开始,下一个父类;
                 super().func()  意思:默认为当前类名的下一个.
     
     
     
     
  • 相关阅读:
    阿里P8架构师谈:阿里双11秒杀系统如何设计?
    秒杀系统设计的知识点
    秒杀系统架构优化思路
    秒杀系统解决方案
    Entity Framework Code First (七)空间数据类型 Spatial Data Types
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
  • 原文地址:https://www.cnblogs.com/kevin-red-heart/p/10169527.html
Copyright © 2011-2022 走看看