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

news2024/11/28 6:51:18

缘分 朝生暮死犹如露水

                   —— 24.4.1

学习目标:

1.理解封装的概念

2.掌握私有成员的使用

一、面向对象三大特性:

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

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

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

①封装        ②继承        ③多态

二、封装

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

①属性

②行为

封装到类中,描述为:

①成员变量

②成员方法

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

对用户隐藏的属性和行为

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

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

私有成员

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

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

        ①私有成员变量

        ②私有成员方法

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

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

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

即可完成私有成员的设置

使用私有成员

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

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

案例:

'''
演示面向对象封装思想中私有成员的使用
'''

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

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

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

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

'''
演示面向对象封装思想中私有成员的使用
'''

# 定义一个类,内含私有成员变量和私有成员方法
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私有成员

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

设计一个手机类,内部包含:
私有成员变量: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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1562630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Lua 和 Love 2d 教程 二十一点朴克牌 (上篇lua源码)

GitCode - 开发者的代码家园 Lua版完整原码 规则 庄家和玩家各发两张牌。庄家的第一张牌对玩家是隐藏的。 玩家可以拿牌(即拿另一张牌)或 停牌(即停止拿牌)。 如果玩家手牌的总价值超过 21,那么他们就爆掉了。 面牌…

Tulsimer® CH-99硼选择吸附树脂在超纯水除硼领域的卓越应用与优势

超纯水(UPW)是一种高度纯净的水体形态,通过一系列精密的净化步骤,几乎去除了所有非氢氧成分,包括但不限于微生物、有机污染物及矿物质微量元素。其制备流程涵盖了预处理、反渗透、离子交换、蒸馏、紫外线或超滤等多种高…

成都三环旁的数字影像文创产业园,建设热度高,创新活力足

在成都市金牛区的“九里九园”簇群建设中心区域,一座充满活力的国际数字影像产业园正在崛起。这个成都数字产业园不仅建设热度高涨,更以其创新活力吸引了无数目光。作为数字产业的重要一环,它正在为成都乃至全球的数字文创产业描绘出一幅充满…

plasmo内容UI组件层级过高导致页面展示错乱

我使用plasmo写了一个行内样式的UI组件,但是放到页面上之后,会和下拉组件出现层级错乱,看了一下样式,吓我一跳:层级竟然设置的如此之高 所以就需要将层级设置低一点: #plasmo-shadow-container {z-index: …

vue+element ui实现表单组件的封装

效果图: 主要是使用vue elmentUi 的from的基础上进行封装 使用改组件,是需要自定义从父组件传入一下字段表单字段 export const topicTypeMainTaskEdit: any new Map([// 主任务可编辑状态[feasibleInstructions, // 督办件[{value: documentNum…

基于单片机智能数字温度采集报警器系统设计

**单片机设计介绍,基于单片机智能数字温度采集报警器系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机智能数字温度采集报警器系统设计的核心目标是通过单片机实现温度的实时采集、显示以及超温报警…

Nexpose v6.6.244 for Linux Windows - 漏洞扫描

Nexpose v6.6.244 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, Release Mar 27, 2024 请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.o…

Windows启动动画的小秘密

>网管小贾 / sysadm.cc 员工求领导办事,司空见惯,没啥稀奇。 领导求员工办事,想都别想,怎么可能。 然而这世上之事万里总有个一,这不,就在上个礼拜,开天辟地头一遭,让我给碰上…

Redis开源协议调整,我们怎么办?

2024年3月20日, Redis官方宣布,从 Redis 7.4版本开始,Redis将获得源可用许可证 ( RSALv2 ) 和服务器端公共许可证 ( SSPLv1 ) 的双重许可,时间点恰逢刚刚完成最新一轮融资,宣布的时机耐人寻味。 Redis协议调整,对云计算…

需要本地后端的真机调试-微信

打开和修改IP改为电脑与手机同一局域网的 不知道这个要不要

交通标志识别项目 | 基于Tensorflow+SSD实现道路交通标志识别

项目应用场景 面向智能驾驶或自动驾驶场景道路道路交通标志的识别,在交通标志识别的基础上为下一步的智能决策提供前提 项目效果: 项目细节 > 具体参见项目 README.md (1) 安装依赖 Python3.5、TensorFlow v0.12.0、Pickle、OpenCV-Python、Matplotl…

宁波ISO45001:2018职业健康与安全管理体系认证

🤓ISO45001:2018职业健康与安全管理体系认证 ISO45001(OHSAS18001)全称🍉是职业安全卫生🍐管理标准,是国际上🥕继ISO9000质量管理体系🌴标准和ISO14000环境管理&#x1f…

主站设备通过Modbus转Profinet网关与湿度传感器通讯配置

Modbus转Profinet网关(XD-MDPN100)可以实现不同协议设备通讯,有些现场需要实时监测环境参数,但大由于当时环境仪表设备不能达到直连效果,通过Modbus转Profinet网关,湿度传感器的数据可以被准确、可靠地传输…

【通信原理笔记】【三】模拟信号调制——3.3 包络调制(AM)

文章目录 前言一、AM的数学表示二、AM的相干解调三、AM的非相干解调四、AM调制的性能总结 前言 本文将介绍包络调制方法,该方法的思路是将 m ( t ) m(t) m(t)作为已调信号的复包络的模——即包络。 一、AM的数学表示 根据包络调制的思路,我们有如下数学…

注册接口和前置SQL及数据生成及封装

注册接口 演示注册接口的三步操作:【注册流程逻辑】 第一步:发送注册短信验证码接口请求 请求方法: put 请求地址:http://shop.lemonban.com:8107/user/sendRegisterSms 请求参数:{“mobile”:“13422337766”} 请求头…

NASA数据集——2016-2019 年北极地区天气研究和预报(WRF)随机时间倒拉格朗日传输(STILT)粒子轨迹文件

ABoVE: Level-4 WRF-STILT Particle Trajectories for Circumpolar Receptors, 2016-2019 简介 文件修订日期:2021-12-07 数据集版本: 1 摘要 本数据集提供了 2016-2019 年期间天气研究和预报(WRF)随机时间倒拉格朗日传输(ST…

JavaEE初阶-线程3

文章目录 一、线程安全问题-内存可见性二、等待通知2.1 wait()方法2.2 notify()方法 一、线程安全问题-内存可见性 import java.util.Scanner;public class Demo27 {private static int count0;//下面这段代码会出现内存的可见性问题//将从内存中读取count值的操作称为load 判…

LINUX笔记温习

目录 DAY1 DAY2 day3: day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14 day15 20day DAY1 1、多层级文件夹创建要带-p; 2、创建多文件,要先到该目录下才能创建(第一个目录必须存在才能有效建立); D…

简单说清楚什么是SQL Injection?

最近看完了《The Pragmatic Programmer: 20th Anniversary Edition, 2nd Edition: Your Journey to Mastery》,在第7章:While You Are Coding的footnotes中,提到了一幅漫画: 这不仅用简单的方式说清楚了什么是SQL Injection&#…

Veritas NetBackup 10.4 (Unix, Linux, Windows) - 一流的企业备份解决方案

Veritas NetBackup 10.4 (Unix, Linux, Windows) - 一流的企业备份解决方案 The #1 enterprise backup and recovery solution. 请访问原文链接:https://sysin.org/blog/veritas-netbackup-10/,查看最新版。原创作品,转载请保留出处。 作者…