python的多重继承
2018-08-25 本文已影响0人
陆_志东
python的多重继承最好建议使用super的方法调用父类,如果使用父类的类名去调用,就会造成重复调用父类的情况
比如下面的代码:
class A:
def __init__(self):
print("init A")
class B(A):
def __init__(self):
A.__init__(self)
print("init B")
class C(A):
def __init__(self):
A.__init__(self)
print("init C")
class D(B,C):
def __init__(self):
B.__init__(self)
C.__init__(self)
print("init D")
d = D()
执行结果:
init A
init B
init A
init C
init D
可以看到 A是被初始化两次的
所以这是使用父类名调用的不好的方式
下面的super的方式就不会出现这样的问题,这是因为super在调用的时候,会进行规则的排序
下面是改用了super进行调用的方式:
class A:
def __init__(self):
print("init A")
class B(A):
def __init__(self):
super(B,self).__init__()
print("init B")
class C(A):
def __init__(self):
super(C,self).__init__()
print("init C")
class D(B,C):
def __init__(self):
super(D,self).__init__()
print("init D")
d = D()
打印结果:
initA
initC
initB
initD
这个顺序是调用父类的时候super进行对父类执行的顺序进行排序过的