应用场景:
当子类函数重写覆盖父类的init(self)方法时,仍需调用父类init(self)中的方法时可使用以下两种方式:
1、调用未绑定的父类方法
def __init__(self):
#调用父类方法,方法一调用时要明确父类名称
Fish.__init__(self)
#使用自身方法
self.hungry=true
2、使用super函数
super() 函数是用于调用父类(超类)的一个方法。
def __init__(self):
#调用父类方法,方法二调用时不用明确父类名称,它会自动帮你找出所有基类以及对应的方法
super().__init__()
#使用自身方法
self.hungry=true
super()函数实例 深度理解:
class A():
def __init__(self):
print("进入A...")
print("离开A...")
class B(A):
def __init__(self):
print("进入B...")
A.__init__(self)
print("离开B...")
class C(A):
def __init__(self):
print("进入C...")
A.__init__(self)
print("离开C...")
class D(B, C):
def __init__(self):
print("进入D...")
B.__init__(self)
C.__init__(self)
print("离开D...")
d = D()
运行结果:出现了多重继承导致重复调用问题,实例化D类A被前后进入了两次。
进入D...
进入B...
进入A...
离开A...
离开B...
进入C...
进入A...
离开A...
离开C...
离开D...
使用super()函数改进:
class A():
def __init__(self):
print("进入A...")
print("离开A...")
class B(A):
def __init__(self):
print("进入B...")
super().__init__()
print("离开B...")
class C(A):
def __init__(self):
print("进入C...")
super().__init__()
print("离开C...")
class D(B, C):
def __init__(self):
print("进入D...")
super().__init__()
print("离开D...")
d = D()
结果:
进入D...
进入B...
进入C...
进入A...
离开A...
离开C...
离开B...
离开D...
说明:本文实例参考小甲鱼python教程
码子不易,解决问题的话帮忙点个赞哦