复写
复写其实就是子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么就可以进行复写,并且子类中对成员属性的修改不会影响父类中的成员属性。
class Phone:
IMEI = None #序列号
producer = "ITCAST" #厂商
def call_by_5g(self):
print("父类的5g通话")
class MyPhone(Phone):
producer = "ITHEIMA" #复写父类属性
def call_by_5g(self): #复写父类方法
print("子类的5g通话") #结果:子类的5g通话
phone = MyPhone()
phone.call_by_5g()
print(phone.producer) #结果:ITCAST
调用父类同名成员
一旦父类成员,那么类对象调用成员的时候,就会调用复写后的新成员,如果需要再使用被复写的父类成员,就需要特殊的调用方法。
方式1:
调用父类成员
1.使用成员变量:父类名.成员变量
2.使用成员方法:父类名.成员方法(self)
方式2:
使用super()调用父类成员
1.使用成员变量:super().成员变量
2.使用成员方法:super().成员方法()
1. 使用父类名直接调用
-
如果子类复写了父类的方法或属性,可以通过
父类名.
的方式明确调用父类的成员。
示例代码:
class Phone:
IMEI = None # 序列号
producer = "ITCAST" # 厂商
def call_by_5g(self):
print("父类的5g通话")
class MyPhone(Phone):
producer = "ITHEIMA" # 复写父类属性
def call_by_5g(self): # 复写父类方法
print("子类的5g通话")
# 调用父类的同名方法
Phone.call_by_5g(self)
phone = MyPhone()
phone.call_by_5g()
print(phone.producer)
输出结果:
子类的5g通话
父类的5g通话
ITHEIMA
2. 使用 super()
调用
-
super()
是一个内建函数,用于调用父类的成员。 -
super()
会根据方法解析顺序(MRO)自动查找父类的成员。
示例代码:
class Phone:
IMEI = None # 序列号
producer = "ITCAST" # 厂商
def call_by_5g(self):
print("父类的5g通话")
class MyPhone(Phone):
producer = "ITHEIMA" # 复写父类属性
def call_by_5g(self): # 复写父类方法
print("子类的5g通话")
# 调用父类的同名方法
super().call_by_5g()
phone = MyPhone()
phone.call_by_5g()
print(phone.producer)
输出结果:
子类的5g通话
父类的5g通话
ITHEIMA