1.继承的语法
class 类名(父类名):
类内容体
继承分为:单继承和多继承
1.1 单继承代码演示
"""
演示面向对象,继承的基础语法
"""
# 演示单继承
class phone:
IMEI = None # 序列号
producer = "HM" # 厂商
def call_by_4g(self):
print("4g通话")
class phone2022(phone):
face_id = "10001" # 面部识别ID
def call_by_5g(self):
print("2022年新功能:5g通话")
phone1 = phone2022()
print(phone.producer)
phone1.call_by_5g()
phone1.call_by_4g()
2.2 多继承演示
注意:多继承时,同名的变量,以继承列表左边先出现的为准,先继承的优先级高于后继承的
"""
演示面向对象,继承的基础语法
"""
# 演示多继承
class phone:
IMEI = None # 序列号
producer = "ITCAST" # 厂商
def call_by_4g(self):
print("4g通话")
class phone2022(phone):
face_id = "10001" # 面部识别ID
def call_by_5g(self):
print("2022年新功能:5g通话")
class NFCReader:
nfc_type = "第五代"
producer = "HM" # 厂商
def read_card(self):
print("NFC读卡")
def write_card(self):
print("NFC写卡")
class RemoteControl:
rc_type = "红外遥控"
def control(self):
print("红外遥控开启")
class MyPhone(phone,NFCReader,RemoteControl):
pass # 用来补全语法,这里不需要添加新功能,写上这句只是为了避免语法错误
phone2 = MyPhone()
phone2.call_by_4g()
phone2.read_card()
phone2.write_card()
phone2.control()
# 这里是phone里的厂商,而不是NFCReader里的
# 多继承时,同名的变量,以继承列表左边先出现的为准
print(phone2.producer) # 结果:ITCAST
2.复写和使用父类成员
2.1复写父类成员的语法
复写
:子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。
即:在子类中重新定义同名的属性或方法即可。
- 代码示例:
class Phone:
IMEI = None
producer = "ITCAST" # 厂商
def call_by_5g(self):
print("使用5g网络进行通话")
# 定义子类,复写父类成员
class MyPhone(Phone):
producer = "CHINA" # 复写父类的成员属性
def call_by_5g(self):
print("开启CPU单核模式,确保通话的时候省电")
print("使用5g网络进行通话")
print("关闭CPU单核模式,确保性能")
phone = MyPhone()
phone.call_by_5g()
print(phone.producer)
输出结果:
开启CPU单核模式,确保通话的时候省电
使用5g网络进行通话
关闭CPU单核模式,确保性能
CHINA
2.2在子类中调用父类成员
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员。
如果需要使用被复写的父类的成员,需要特殊的调用方式:
-
方式1:
-
调用父类成员
使用成员变量:
父类名.成员变量
使用成员方法:父类名.成员方法(self)
-
方式2:
-
使用super()调用父类成员
使用成员变量:super().成员变量
使用成员方法:super().成员方法()
-
代码演示:
class Phone:
IMEI = None
producer = "ITCAST" # 厂商
def call_by_5g(self):
print("使用5g网络进行通话")
# 定义子类,复写父类成员
class MyPhone(Phone):
producer = "CHINA" # 复写父类的成员属性
def call_by_5g(self):
# 调用父类成员
# 方式1
print(f"父类的厂商是:{Phone.producer}")
Phone.call_by_5g(self)
# 方法2:
print(f"父类的厂商是:{super().producer}")
# 用super()方法不需要传self了
super().call_by_5g()
phone = MyPhone()
phone.call_by_5g()
print(phone.producer)
输出结果:
父类的厂商是:ITCAST
使用5g网络进行通话
父类的厂商是:ITCAST
使用5g网络进行通话
注意:只可以在子类内部调用父类的同名成员,子类的实体对象调用默认是调用子类复写的