目录
一.面向对象的三大特性
私有成员
使用私有成员
封装小结
二.继承
pass关键字
多继承
多继承注意事项
小结
三.复写和使用父类成员
复写父类成员的语法
调用父类同名成员
一.面向对象的三大特性
面向对象编程,是许多编程语言都支持的一种编程思想。
简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。
面向对象包含3大主要特性:
- 封装
- 继承
- 多态
私有成员
现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持。
类中提供了私有成员的形式来支持。
- 私有成员变量
- 私有成员方法
定义私有成员的方式非常简单,只需要:
- 私有成员变量:变量名以_ _开头(2个下划线)
- 私有成员方法:方法名以_ _开头(2个下划线)
即可完成私有成员的设置
私有方法无法直接被类对象使用、私有变量无法赋值,也无法获取值
演示
class Phone:
id=None
produce=None
__current_voltage=None#当前电压
def call_by_5g(self):
print("5g已经开启")
def __keep_single_core(self):
print("开启节电模式")
phone=Phone()
phone.call_by_5g()
phone.__keep_single_core
结果是
使用私有成员
私有成员无法被类对象使用,但是可以被其它的成员使用。
演示
class Phone:
id=None
produce=None
__current_voltage=0.5#当前电压
def __keep_single_core(self):
print("开启节电模式")
def call_by_5g(self):
if(self.__current_voltage>=1):
print("5g已经开启")
else:
print("电量不足")
self.__keep_single_core()
phone=Phone()
phone.call_by_5g()
结果是
封装小结
1.封装的概念是指?
将现实世界事物在类中描述为属性和方法,即为封装。
2.什么是私有成员?为什么需要私有成员?
现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时候也需要达到这个要求,就需要定义私有成员了
3.如何定义私有成员?
成员变量和成员方法的命名均以_ _作为开头即可
4.私有成员的访问限制?
类对象无法访问私有成员
类中的其它成员可以访问私有成员
二.继承
继承就是一个类,继承另外一个类的成员变量和成员方法
语法:
比如说,下图从左到右
构建Phone2022类,你会选择
1.从头写一个新的类
2.基于已有的Phone类进行修改
我们可以使用继承来完成此需求
继承分为︰单继承和多继承
使用如图语法,可以完成类的单继承。
继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有)
演示
class Phone:
id=345
produce="huawei"
__current_voltage=0.5#当前电压
class Phone2022(Phone):
pass
phone=Phone2022()
print(phone.id)
print(phone.produce)
print(phone.__current_voltage)
结果是
如图,私有成员无法继承
pass关键字
这pass关键字就是用来去补全语法的,pass本身表示这里是空的,只是让我们的语法不产生错误
多继承
Python的类之间也支持多继承,即一个类,可以继承多个父类
演示
演示
class Phone:
id=345
produce="huawei"
def call_by_5g(self):
print("5g通话")
class NFCReader:
nfc_type="第五代"
produce="HW"
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
phone=myphone()
phone.call_by_5g()
phone.read_card()
phone.write_card()
phone.control()
结果是
多继承注意事项
多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。即:先继承的保留,后继承的被覆盖
小结
1.什么是继承?
继承就是一个类,继承另外一个类的成员变量和成员方法
语法:
子类构建的类对象,可以
- 有自己的成员变量和成员方法
- 使用父类的成员变量和成员方法
2.单继承和多继承
单继承:一个类继承另一个类
多继承:一个类继承多个类,按照顺序从左向右依次继承
多继承中,如果父类有同名方法或属性,先继承的优先级高于后继承
3.pass关键字的作用是什么
pass是占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思
三.复写和使用父类成员
子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。即:在子类中重新定义同名的属性或方法即可。
复写父类成员的语法
演示
class Phone:
id=345
produce="huawei"
def call_by_5g(self):
print("5g通话")
class myphone(Phone):
produce = "hw"#复写父类的成员属性
def call_by_5g(self):#复写父类成员方法
print("4g通话")
phone=myphone()
print(phone.produce)
phone.call_by_5g()
结果是
但是呢我父类的这个东西呢我还想要
那么就需要
调用父类同名成员
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员
如果需要使用被复写的父类的成员,需要特殊的调用方式:
法一:
调用父类成员
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)
法二:
使用super()调用父类成员
使用成员变量: super().成员变量
使用成员方法:super().成员方法()
演示
class Phone:
id=345
produce="huawei"
def call_by_5g(self):
print("5g通话")
class myphone(Phone):
produce = "hw"#复写父类的成员属性
def call_by_5g(self):#复写父类成员方法
# 方法一
print(f"父类的品牌是{Phone.produce}")
Phone.call_by_5g(self)
#方法二
print(f"父类的品牌是{super().produce}")
super().call_by_5g()
phone=myphone()
print(phone.produce)
phone.call_by_5g()
结果是
小结
1.复写表示:
对父类的成员属性或成员方法进行重新定义
2.复写的语法:
在子类中重新实现同名成员方法或成员属性即可
3.在子类中,如何调用父类成员
方式1:
调用父类成员
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)
方式2:
使用super()调用父类成员
使用成员变量: super().成员变量
使用成员方法: super().成员方法()
注意:只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是
调用子类复写的