对于单继承类:
- 如果没有super函数,则子类只能调用父类的方法,不能调用属性
class A:
def __init__(self):
self.name = "Im A!"
def add(self, x):
y = x+1
print(y)
class B(A):
def __init__(self):
self.age=18
if __name__ == '__main__':
b = B()
b.add(2) # 调用方法 3
print(b.name) # 调用属性 报错
- 使用super函数,子类可以同时调用父类的方法和属性
class A:
def __init__(self):
self.name = "Im A!"
def add(self, x):
y = x+1
print(y)
class B(A):
def __init__(self):
super().__init__()
self.age=18
if __name__ == '__main__':
b = B()
b.add(2) # 调用方法 3
print(b.name) # 调用属性 Im A!
对于多继承类:
- super()函数可以避免父类重复调用
class A:
def __init__(self):
print("ENTER A")
self.name = "Im A!"
print("LEAVE A")
def add(self, x):
y = x+1
print(y)
class B(A):
def __init__(self):
print("ENTER B")
super().__init__()
print("LEAVE B")
class C(A):
def __init__(self):
print("ENTER C")
super().__init__()
print("LEAVE C")
class D(B, C):
def __init__(self):
print("ENTER D")
super().__init__()
print("LEAVE D")
if __name__ == '__main__':
d = D()
运行结果
ENTER D
ENTER B
ENTER C
ENTER A
LEAVE A
LEAVE C
LEAVE B
LEAVE D