一、覆盖的介绍
是指有继承关系的类中 ,子类中实现了与基类中同名的方法 , 在子类实例中调用该方法时 , 实际调用的是子类中的方法 ,这种现象称作覆盖 , 也就是实现与父类同名 ,但是功能不同的方法 ,可以改变父类方法的功能。
二、简单示例
# 定义子类MyList , 继承于list父类
class MyList(list):
pass
# 实例化
L = MyList(range(1,10))
L.append(10)
print(L)
输出内容:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 定义子类继承于父类list , 并添加与父类相同方法名的append方法
class MyList(list):
def append(self, n):
print("子类方法覆盖了父类方法")
L = MyList(range(1,10))
# 此时调用后会执行子类中的方法
L.append(10)
print(L)
输出内容:
子类方法覆盖了父类方法
[1, 2, 3, 4, 5, 6, 7, 8, 9]
三、supser()函数示例
如果子类实例想要调用父类方法应该怎么做 ?
list.append(L,10) # 可以显示调用 , 但是推荐super函数 super(MyList , L).append(10)
在方法内直接使用super()
class MyList(list):
def append(self, n):
print("子类方法覆盖了父类方法")
def my_append(self,n):
super().append(10)
L = MyList(range(1,10))
L.my_append(10)
print(L)
输出内容
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 如果在子类中实现了__init__方法后 , 子类实例调用的是子类中的初始化方法 , 如果此时想要调用父类中# 的初始化方法 , 需要使用super()
class MyList(list):
def __init__(self , *args):
pass
myl = MyList([1,2,3,4,5])
myl.append(6)
print(myl)
# 此时会输出 [6]
使用super
class MyList(list):
def __init__(self , *args):
super(MyList,self).__init__(*args)
myl = MyList([1,2,3,4,5])
myl.append(6)
print(myl)
输出 [1,2,3,4,5,6]