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中是支持多重继承的,也就是我们可以为一个类同时指定多个父类。可以在类名的()后边添加多个类,来实现多重继承。
class C(A,B):
pass
多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法。
print(C.__bases__)
执行结果:
此时C继承了A,B,此时A,B,C的关系
调用test:
c = C()
c.test()
c.test2()
执行结果:
在开发中没有特殊的情况,应该尽量避免使用多重继承,因为多重继承会让我们的代码过于复杂。
在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()
执行结果:
如果A中没有test方法,才会调用B中的。
class A(object):
pass
执行结果:
如果多个父类中有同名的方法,则会现在第一个父类中寻找,然后找第二个,然后找第三个......前边父类的方法会覆盖后边父类的方法。
我们通过图来分析:
D继承了A,B,C,如果此时D中有test()方法,则直接输出就行,若没有,则需要先去第一个父类中找,(我们以A,B,C为例),此时我们应该去A中找,若A中没有,则需要去A的父类(object)中去找,若没有继续找,此时去第二个父类B中找,若没有则去B的父类中找,如果已经找过一次,则不会继续去找(提高性能),则去第三个C中找,若没有,则去它的父类中找,因为C的父类是A,B,已经找过,则不会再继续找。
配套视频课程,点击这里查看
获取更多资源请订阅Python学习站