Python学习从0到1 day20 第二阶段 面向对象 ② 封装

缘分 朝生暮死犹如露水

------ 24.4.1
学习目标:

1.理解封装的概念

2.掌握私有成员的使用

一、面向对象三大特性:

面向对象编程,是许多编程语言都支持的一种编程思想

简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发

面向对象包含三大主要特性:

①封装 ②继承 ③多态

二、封装

封装表示的是,将现实世界事物的:

①属性

②行为

封装到类中,描述为:

①成员变量

②成员方法

从而完成程序对现实世界事物的描述

对用户隐藏的属性和行为

现实世界中的事物,有属性和行为

但是不代表这些属性和行为都是开放给用户使用的

私有成员

既然现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持

类中提供了私有成员的形式来支持

①私有成员变量

②私有成员方法

定义私有成员变量的方式非常简单,只需要:

①私有成员变量:变量名以__开头(2个下划线)

②私有成员方法:方法名以__开头(2个下划线)

即可完成私有成员的设置

使用私有成员

①私有方法无法直接被类对象使用

②私有变量无法赋值,也无法获取值

案例:

python 复制代码
'''
演示面向对象封装思想中私有成员的使用
'''

# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
    __current_voltage = None    # 当前手机运行电压

    def __keep_single_core(self):
        print("让CPU以单核模式运行")

phone = Phone()
phone.__keep_single_core()
print("__current_voltage")

私有成员无法被类对象使用,但是可以被其他的成员使用

python 复制代码
'''
演示面向对象封装思想中私有成员的使用
'''

# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
    __current_voltage = 1   # 当前手机运行电压

    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()

三、总结

1.封装的概念是指?

将现实世界事物在类中描述为属性和方法,即为封装

2.什么是私有成员?为什么需要私有成员?

现实事物有部分属性和行为是不公开对使用者开放的,同样在类中描述属性和方法的时候也需要达到这个要求,就需要定义私有成员了

3.如何定义私有成员?

成员变量和成员方法的命名均以__作为开头即可(2个下划线)

4.私有成员的访问限制?

类对象无法访问私有成员

类中的其他成员可以访问私有成员

四、思考

私有成员的定义我们已经了解了,但是他有什么实际的意义吗?

在类中提供仅供内部使用的属性和方法,而不对外开放(类对象无法使用)

五、练习

练习 设计带有私有成员的手机

设计一个手机类,内部包含:

私有成员变量:is_5g_enable,类型bool,True表示开启5g,False表示关闭5g

私有成员方法:__check_5g(),会判断私有成员_is_5g_enable的值

若为True,打印输出:5g开启

若为False,打印输出:5g关闭,使用4g网络

公开成员方法:call_by_5g(),调用它会执行

调用私有成员方法:__check_5g(),判断5g网络状态

打印输出:正在通话中

运行结果:5g关闭,使用4g网络正在通话中

通过完成这个类的设计和使用,体会封装中私有成员的作用

对用户公开的: call_by_5g()方法

对用户隐藏的:__is_5g_enable私有变量和__check_5g私有成员

python 复制代码
'''
练习 设计带有私有成员的手机

设计一个手机类,内部包含:
私有成员变量:is_5g_enable,类型bool,True表示开启5g,False表示关闭5g
私有成员方法:__check_5g(),会判断私有成员_is_5g_enable的值
    若为True,打印输出:5g开启
    若为False,打印输出:5g关闭,使用4g网络

公开成员方法:call_by_5g(),调用它会执行
    调用私有成员方法:__check_5g(),判断5g网络状态
    打印输出:正在通话中
运行结果:5g关闭,使用4g网络正在通话中

通过完成这个类的设计和使用,体会封装中私有成员的作用
    对用户公开的: call_by_5g()方法
    对用户隐藏的:__is_5g_enable私有变量和__check_5g私有成员
'''

# 设计一个类,用来描述手机
class Phone:
    # 提供私有成员变量:__is_5g_enable
    __is_5g_enable = False  # 私有成员变量:is_5g_enable,类型bool,True表示开启5g,False表示关闭5g

    # 提供私有成员方法
    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()
相关推荐
西岸行者6 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意6 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码6 天前
嵌入式学习路线
学习
毛小茛6 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J6 天前
从“Hello World“ 开始 C++
c语言·c++·学习