python_C3算法

1、什么是c3算法

在python 2.3  之后 类的继承 区分 新式类继承(继承object) 和经典类继承,python 2.3 及之后 的新式类继承方式,其子类查询父类中的成员顺序 遵循 c3算法 。

 

2、c3算法查询成员顺序的理解:

假设某一类的继承关系如下

class A:
    pass
class B(A):
    pass
class C(B):
    pass
class D:
    pass
class E(D,C):
    pass
class H:
    pass
class G(H):
    pass
class F(C,G):
    pass
class FOO(E,F):
    pass

python_C3算法

根据C3算法查找FOO继承顺序

FOO =FOO+ E+F

E       =>   C = C+B+A+Object     =>E = E,D,C,B+A+Object 

F       =>    C = C+B+A+Object    G = G+H+Object      =>F=F,C,B,A,G,H,Object    

 

FOO = FOO+ E+F =>FOO+(E,D,C,B,A,Object) +(F,C,B,A,G,H,Object )     = FOO,E,D,F,C,B,A,G,H,Object

 

过程解析:FOO = ((E,D,C,B,A,Object) +(F,C,B,A,G,H,Object ) 

去第一个元组E 也就是E的继承顺序 ,取元组E的第一个元素E 和 元组F的除去元组F内的第一个元素外的元素匹配,

如果不存在:则将元素E去除,在继续从元组E中取第一个元素D和元组F的除去元组F内的第一个元素外的元素匹配

如果存在:则不移除元素,从第二个元组F中的第一个元素开始匹配 第一个元组E中除去元组E中的第一个元素外的元素进行匹配,不存在:则将第二个元组的第一个元素取出,然后继续从第一个元组的当前第一个元素开始 匹配  以此类推,如果存在,则元素不移除,返回第一组元素 或则下一组元素 的第一个元素开始继续匹配

 

以此类推

结合以上的顺序 FOO =FOO,E,D,F,C,B,A,G,H,Object

 

总结:

多继承场景下,每次都是从第一组取第一个值 和后面组除去第一个值后的剩余值匹配,匹配成功 则不移除这个值,匹配不成功则移除这个值,

匹配成功:下一次将从下一组开始取值进行相同的匹配

匹配不成功:下一次还是从这个组中取值进行相同的匹配, 

 

上一篇:有关于char数组与char*关于内存所在位置的探究


下一篇:1.54寸串口屏(彩屏)在充电桩的应用