多重继承 | Python从入门到精通:高阶篇之三十二

super() | Python从入门到精通:高阶篇之三十一

多重继承

我们通过一个例子来看一下:

class A(object):
    def test(self):
        print('AAA')

class B(object):
    def test2(self):
        print('BBB')

class C(B):
    pass 

类名.__bases__ 这个属性可以用来获取当前类的所有父类 。

print(C.__bases__)
print(B.__bases__)

执行结果:

多重继承 | Python从入门到精通:高阶篇之三十二
多重继承 | Python从入门到精通:高阶篇之三十二

在Python中是支持多重继承的,也就是我们可以为一个类同时指定多个父类。可以在类名的()后边添加多个类,来实现多重继承。

class C(A,B):
    pass

多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法。

print(C.__bases__)

执行结果:

多重继承 | Python从入门到精通:高阶篇之三十二

此时C继承了A,B,此时A,B,C的关系

多重继承 | Python从入门到精通:高阶篇之三十二

调用test:

c = C()

c.test()
c.test2()

执行结果:

多重继承 | Python从入门到精通:高阶篇之三十二

在开发中没有特殊的情况,应该尽量避免使用多重继承,因为多重继承会让我们的代码过于复杂。
在B中添加一个方法:

class A(object):
    def test(self):
        print('AAA')

class B(object):
    def test(self):
        print('B中的test()方法~~')

    def test2(self):
        print('BBB') 

class C(A,B):
    pass

c = C()

c.test()

执行结果:

多重继承 | Python从入门到精通:高阶篇之三十二

如果A中没有test方法,才会调用B中的。

class A(object):
    pass

执行结果:

多重继承 | Python从入门到精通:高阶篇之三十二

如果多个父类中有同名的方法,则会现在第一个父类中寻找,然后找第二个,然后找第三个......前边父类的方法会覆盖后边父类的方法。

我们通过图来分析:

多重继承 | Python从入门到精通:高阶篇之三十二

D继承了A,B,C,如果此时D中有test()方法,则直接输出就行,若没有,则需要先去第一个父类中找,(我们以A,B,C为例),此时我们应该去A中找,若A中没有,则需要去A的父类(object)中去找,若没有继续找,此时去第二个父类B中找,若没有则去B的父类中找,如果已经找过一次,则不会继续去找(提高性能),则去第三个C中找,若没有,则去它的父类中找,因为C的父类是A,B,已经找过,则不会再继续找。

多重继承 | Python从入门到精通:高阶篇之三十二

配套视频课程,点击这里查看

获取更多资源请订阅Python学习站

上一篇:【Unity3D 灵巧小知识点】☀️ | 在编辑器中手动设置 各个脚本的执行顺序


下一篇:编程萌新看过来,一文带你入门Python | 伸手党福利篇