循此苦旅,以达天际
—— 24.4.3
一、继承的基础语法
学习目标:
① 理解继承的概念
② 掌握继承的使用方式
③ 掌握pass关键字的作用
单继承
语法:
class 类名(父类名):
类内容体
继承分为:单继承和多继承
继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有)
案例:
''' 演示面向对象:继承的基础语法 ''' # 演示单继承 class Better: Imei = "AllBetter" def sayhello(self): print("一切都会好的") class Future(Better): id = "insist" def Tomorrow(self): print("我一直相信") Lcl = Future() print(Lcl.Imei) print(Lcl.id) Lcl.sayhello() Lcl.Tomorrow()
多继承
python中的类之间也支持多继承,即一个类,可以继承多个父类
语法:
class 类名(父类1,父类2,……,父类N):
类内容体
案例:
''' 演示多继承 ''' class Phone: IMEI = None # 序列号 producer = "HM" # 厂商 def call_by_4g(self): print("4G通话") class NFCReader: nfc_type = "第五代" producer = "HM" def read_card(self): print("NFC读卡") def whrite_card(self): print("NFC写卡") class RemoteControl: rc_type = "红外遥控" def control(self): print("红外遥控开启了") class MyPhone(Phone,NFCReader,RemoteControl): pass # 补全,让我们的代码显示为空 phone = MyPhone() print(phone.producer) phone.call_by_4g() phone.read_card() phone.whrite_card() phone.control()
多继承注意事项:
多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级
即:先继承的保留,后继承的被覆盖
总结
1.什么是继承?
继承就是一个类,继承另外一个类的成员变量和成员方法
语法:
class 类(父类1,父类2,……,父类N):
类内容体
子类构建的类对象,可以:
①有自己的成员变量和成员方法
②使用父类的成员变量和成员方法
2.单继承和多继承
单继承:一个类继承另一个类
多继承:一个类继承多个类,按照顺序从左向右依次继承
多继承中,如果父类有同名方法或属性,先继承的优先级高于后继承的
3.pass关键字的作用是什么?
pass是占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思
二、复写和使用父类成员
学习目标
1.掌握复写父类成员的语法
2.掌握如何在子类中调用父类成员
复写
子类继承父类的成员属性和成员方法后,如果对其不满意,那么可以进行复写
即:在子类中重新定义同名的属性或方法即可
案例:
''' 复写 ''' 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通话") print("开启CPU单核模式,以便于省电") myPhone = MyPhone() myPhone.call_by_5g() print(myPhone.IMEI) print(myPhone.producer)
调用父类同名成员
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员
如果需要使用被复写的父类的成员,需要特殊的调用方式:
方式1:
调用父类成员
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)
方式2:
使用super()调用父类成员
使用成员变量:super().成员变量
使用成员方法:super().成员方法()
''' 复写 ''' 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通话") print("开启CPU单核模式,以便于省电") ''' 如果需要使用被复写的父类的成员,需要特殊的调用方式: 方式1: 用父类成员 使用成员变量:父类名.成员变量 使用成员方法:父类名.成员方法(self) 方式2: 使用super()调用父类成员 使用成员变量:super().成员变量 使用成员方法:super().成员方法() ''' print(f"父类的厂商是:{super().producer}") super().call_by_5g() myPhone = MyPhone() myPhone.call_by_5g() print(myPhone.IMEI) print(myPhone.producer)
总结
1.复写表示:
对父类的成员属性或成员方法进行重新定义
2.复写的语法:
在子类中重新实现同名成员方法或成员属性即可
3.在子类中,如何调用父类成员:
方式1:
调用父类成员
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)
方式2:
使用super()调用父类成员
使用成员变量:super().成员变量
使用成员方法:super().成员方法()
注意:只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是调用子类复写的