Python学习:多继承和super()

python类的体系中如果出现了继承,子类如果没有写自己的初始化方法,会自动继承第一个父类的方法,所以我们需要自己写子类的初始化:如果像下面的代码:

class A:
def __init__(self):
print("Enter A")
print("Leave A")

class B(A):
def __init__(self):
print("Enter B")
A.__init__(self)
print("Leave B")

class C(A):
def __init__(self):
print("Enter C")
A.__init__(self)
print("Leave C")

class D(A):
def __init__(self):
print("Enter D")
A.__init__(self)
print("Leave D")

class E(B, C, D):
def __init__(self):
print("Enter E")
B.__init__(self)
C.__init__(self)
D.__init__(self)
print("Leave E")

会造成公共父类A被调用多次.

正确的办法是使用super,它会把当前的类返回一个父类的对象,注意你在体系中使用了super那么所有的地方都要使用super,否则可能造成父类多次被调用或者不能调用所有的父类方法(这是由super的机制造成的,具体实现不懂),super保证所有父类只会执行一次,而且修改代码时也很方便:

class A(object):
    def __init__(self):
        print('Enter A')
        self.__test = 0
class C(object):
    def __init__(self):
        print('Enter C')
        super().__init__()
        self.__test2 = 3
class D(object):
    def __init__(self):
        super().__init__()
        print('enter D')
class B(A):
    def __init__(self):
        print('Enter B')
        super().__init__()
    def set(self):
        self.__test = 2
    def display(self):
        print(dir(self))
class E(C,D):
    def __init__(self):
        print('Enter E')
        super().__init__();

你可能感兴趣的:(Python学习:多继承和super())