目录
一.面向对象的三大特性
面向对象编程,是许多编程语言都支持的一种编程思想。
简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。
面向对象包含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().成员方法()
注意:只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是
调用子类复写的
转载:https://blog.csdn.net/weixin_63318044/article/details/128506538