看例子很清晰,不写super,如果不定义子类的__init__属性,那么其实可以直接继承父类的属性和函数,见case1;不写super,如果定义子类的属性,那么无法继承父类的属性;如果写了super,就可以集成也可以自己写
一
class A:
def __init__(self):
self.a = 5
def fun_A(self):
print("执行func_A")
class B(A):
# def __init__(self):
# self.b = 1
# super().__init__()
def func_B(self):
self.fun_A() ## 执行func_A
print("执行func_B:", self.a) ## 执行func_B: 5
if __name__ == '__main__':
res = B()
res.func_B()
二
class A:
def __init__(self):
self.a = 5
def fun_A(self):
print("执行func_A")
class B(A):
def __init__(self):
self.b = 1
# super().__init__()
def func_B(self):
self.fun_A() ## 执行func_A
print("执行func_B:", self.a) ## AttributeError: 'B' object has no attribute 'a'
if __name__ == '__main__':
res = B()
res.func_B()
三
class A:
def __init__(self):
self.a = 5
def fun_A(self):
print("执行func_A")
class B(A):
def __init__(self):
self.b = 1
super().__init__()
def func_B(self):
self.fun_A() ## 执行func_A
print("执行func_B:", self.a) ## 执行func_B: 5
if __name__ == '__main__':
res = B()
res.func_B()