python技巧

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进行对父类执行的顺序进行排序过的
上一篇下一篇

猜你喜欢

热点阅读