python 类继承属性查找方法

python2.3以后新式类继承属性查询算法为C3

class D():
    pass
class B(D):
    pass
class C(D):
    pass
class A(B,C):
    pass

print(A.__mro__)##(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <class 'object'>) A->B->C->D
class D():
    pass
class E():
    pass
class B(D):
    pass
class C(E):
    pass
class A(B,C):
    pass

print(A.__mro__)##(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.C'>, <class '__main__.E'>, <class 'object'>) A->B->D->C->E

 

class A():
    def __init__(self):
        print("A")

class B(A):
    def __init__(self):
        print("B")
        super().__init__()
class C(A):
    def __init__(self):
        print("C")
        super().__init__()
class D(B,C):
    def __init__(self):
        print("D")
        super(D,self).__init__()
if __name__=='__main__':
    d=D()
    print(D.__mro__)
##结果 super不一定是调用父类方法 也是按__mro__调用上个类的方法
 D B C A (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)

 

posted @ 2019-11-27 17:38  howhy  阅读(548)  评论(0)    收藏  举报