python-33 面向对象之四:mro、super().__init__

类的继承顺序:按照mro线性顺序列表查找,经典类按照深度优先查找,新式类按照广度优先查找

经典类:python2中分经典类和新式类,经典类形如--class A,和新式类,形如--class A(object)

 

新式类:python3中全是新式类

 

深度优先:从左自右查找分支,先第一个分支一直查到基类,若无再查第二个分支。。。

广度优先:从左自右查找分支,先查第一个分支,不查到基类,直到最后一个分支才查找基类。。。

class A:
    def Test(self):
        print('A')
    pass
class G:
    def Test(self):
        print('G')
    pass
class BL(A):
    # def Test(self):
    #     print('BL')
    pass
class BR(A):
    def Test(self):
        print('BR')
    pass
class F(G):
    # def Test(self):
    #     print('F')
    pass
class CL(BL):
    # def Test(self):
    #     print('CL')
    pass
class CR(BR):
    def Test(self):
        print('CR')
    pass
class D(CL,CR,F):
    # def Test(self):
    #     print('D')
    pass

d=D()
d.Test()#D-->CL--BL--CR--BR--A--F--G,PY3中广度优先查找
print(D.mro())
#[<class '__main__.D'>, <class '__main__.CL'>, <class '__main__.BL'>, <class '__main__.CR'>, <class '__main__.BR'>, <class '__main__.A'>, <class '__main__.F'>, <class '__main__.G'>, <class 'object'>]
View Code

 调用父类:super().__init__()父类初始化

posted @ 2019-01-19 18:46  优雅的代码  阅读(192)  评论(0编辑  收藏  举报