day14
笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了
目录
102、封装
三大特性
面向对象包含3大主要特性:
- 封装
- 继承
- 多态
封装表示的是,将现实世界事物的:
- 属性
- 行为
封装到类中,描述为:
- 成员变量
- 成员方法
从而完成程序对现实世界事物的描述
对用户隐藏的属性和行为
现实世界中的事物,有属性和行为。
但是不代表这些属性和行为都是开放给用户使用的。
私有成员
既然现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持。
类中提供了私有成员的形式来支持。
- 私有成员变量
- 私有成员方法
定义私有成员的方式非常简单,只需要:
- 私有成员变量:变量名以 __开头(2个下划线)
- 私有成员方法:方法名以 __开头(2个下划线)
即可完成私有成员的设置。
示例图如下:
使用私有成员
-
私有方法无法直接被类对象使用
-
私有变量无法赋值,也无法获取值
-
私有成员无法被类对象使用,但是可以被其它的成员使用
示例代码:
"""
演示面向对象封装思想中私有成员的使用
"""
# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
# __current_voltage = None # 当前手机运行电压
# __current_voltage = 1
__current_voltage = 0.5
def __keep_single_core(self):
print("让 CPU 以单核模式运行")
def call_by_5g(self):
if self.__current_voltage >= 1:
print("5g通话已开启")
else:
self.__keep_single_core()
print("电量不足,无法使用5g通话,并已设置为单核进行省电。")
phone = Phone()
phone.call_by_5g()
# error: 不能直接使用私有成员
# phone.__keep_single_core()
# print(phone.__current_voltage)
103、封装的课后习题
示例代码:
class Phone:
# __is_5g_enable = None
__is_5g_enable = True
# __is_5g_enable = False
def __check_5g(self):
if self.__is_5g_enable == True:
print("5g开启")
else:
print("5g关闭,使用4g网络")
def call_by_5g(self):
self.__check_5g()
print("正在通话中")
phone = Phone()
phone.call_by_5g()
104、继承
- 继承分为:单继承和多继承
- 使用如图语法,可以完成类的单继承。
- 继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有)
单继承
继承前:
继承后:
示例代码:
# 演示单继承
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)