• python-C3算法


    • 每一个类的继承顺序都是从父类向子类看
    • 形成一个指向关系的顺序[当前类]+[父类的继承顺序]
    • 如果一个类出现在从左到右的第一个顺序上并且没有出现在后面顺序中或者出现在后面的顺序中但是仍然是第一顺序,那么就把这个类提取出来

    由上述可以知道B类,C类和D类是单继承,即很容易知道:
    L(B)= [BFGO] L(C)=[CEO] L(D)=[DGO]

    由此:

    L(A) = L(B) +L(C) + L(D)
    A = [BFGO]+[CEO]+[DGO]
    AB = [FGO]+[CEO]+[DGO]
    ABF = [GO]+[CEO]+[DGO]
    ABFC = [GO]+[EO]+[DGO]
    ABFCE = [GO]+[O]+[DGO]
    ABFCED = [GO]+[O]+[GO]
    ABFCEDG = [O]+[O]+[O]
    ABFCEDGO
     #即顺序为:A->B->F->C->E->D->G->O
    

    L(B)=[BDEO] L(C)=[CEFO]
    L(A)=L(B) + L(C)
    A = [BDEO]+[CEFO]
    AB = [DEO]+[CEFO]
    ABD = [EO]+[CEFO]
    ABDC = [EO]+[EFO]
    ABDCE = [O]+[FO]
    ABDCEF = [O]+[O]
    ABDCEFO
    # 即顺序为:A->B->D->C->E->F->O
    

    代码测试:

    class D: pass
    class E: pass
    class F: pass
    class B(D,E): pass
    class C(E,F): pass
    class A(B,C): pass
    
    
    print(A.mro())
    print(B.mro())
    print(C.mro())
    print(D.mro())
    
    '''
    [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.C'>, <class '__main__.E'>, <class '__main__.F'>, <class 'object'>]
    [<class '__main__.B'>, <class '__main__.D'>, <class '__main__.E'>, <class 'object'>]
    [<class '__main__.C'>, <class '__main__.E'>, <class '__main__.F'>, <class 'object'>]
    [<class '__main__.D'>, <class 'object'>]
    
    '''
    
    
    

    class A1: pass
    class A2: pass
    class A3: pass
    class B1(A1,A2): pass
    class B2(A2): pass
    class B3(A2,A3): pass
    class C1(B1): pass
    class C2(B1,B2): pass
    class C3(B2,B3): pass
    class D(C1, C2, C3): pass
    
    print(D.mro())
    # D-C1-C2-B1-A1-C3-B2-B3-A2-A3-O
    '''
    [<class '__main__.D'>, <class '__main__.C1'>, <class '__main__.C2'>, <class '__main__.B1'>, <class '__main__.A1'>, <class '__main__.C3'>, <class '__main__.B2'>, <class '__main__.B3'>, <class '__main__.A2'>, <class '__main__.A3'>, <class 'object'>]
    '''
    
    

    class A(object):pass
    class B(A):pass
    class C(A):pass
    class D(A):pass
    class E(B):pass
    class F(C):pass
    class G(D):pass
    class H(E,F,G):pass
    
    print(H.mro())
    
    """
    [<class '__main__.H'>, <class '__main__.E'>, <class '__main__.B'>, <class '__main__.F'>, <class '__main__.C'>, <class '__main__.G'>, <class '__main__.D'>, <class '__main__.A'>, <class 'object'>]
    """
    
  • 相关阅读:
    INSERT VALUES 语句
    SQL Server UNION
    SQL Server自定义函数(Scalarvalued Functions)
    设计一程序(Copy.java),可以实现文件的复制操作
    Eclipse 乱码 解决方案总结(UTF8 GBK)
    Java Collection: List、Set、 Map、 HashMap、 Hashtable、 Vector
    [Linux内核]从开机加电到main函数执行前的过程
    eclipse设置本地Javadoc API路径
    归并排序的递归和非递归实现(C代码)
    解决安装MySQL5.1出现Cannot create windows service for mysql.error:0
  • 原文地址:https://www.cnblogs.com/yangchangjie150330/p/10608319.html
Copyright © 2020-2023  润新知