Chapter 27 封装

news2024/9/20 10:45:57

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!

文章目录

  • 前言
  • 一、基本概念
  • 二、私有成员


前言

在面向对象编程(OOP)中,封装是一个重要的概念,旨在保护数据并限制对对象内部状态的直接访问。在 Python 中,私有成员是实现封装的关键工具。本章详细讲解了封装的基本概念以及私有成员的用法。


本篇文章参考:黑马程序员

一、基本概念

面向对象编程是一种许多编程语言支持的编程思想。简单来说,它是通过基于模板(类)创建实体(对象),并利用这些对象进行功能开发。

面向对象的三大特性

  • 封装
  • 继承
  • 多态

封装:将现实世界的事物用类来描述,具体表现为属性和方法。

通俗来讲,封装就是将事物的属性和行为整合到一个类中,通过成员变量和成员方法来实现对现实世界事物的描述。这样,程序能够更清晰地反映现实世界的复杂性。

在这里插入图片描述
现实世界中的事物有属性和行为,但并非所有的属性和行为都是对用户开放的。以手机为例,手机的基本属性如品牌、型号和长度,以及基本行为如上网、拍照和通话,都是对用户开放的。但是手机也有一系列对用户隐藏的属性和行为,比如运行电压、驱动信息等属性以及程序调度、内存管理等行为。
在这里插入图片描述

二、私有成员

因为现实事物有不公开的属性和行为,所以作为现实事物在程序中映射的类也有不公开的属性和行为。

为了实现这一点,类提供了私有成员的形式来支持:

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

私有成员的存在具有实际意义,它们专门用于类的内部,在类中提供仅供内部使用的属性和方法,而不对外开放(类对象无法使用),从而避免被外部访问。
这样的设计可保护类的内部数据和行为,不被外部随意修改,有助于维护数据的一致性和安全性,从而提高程序的可靠性。

私有成员方法不支持类外部直接访问:

# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
    # 私有成员变量
    __current_voltage=None   # 手机运行电压
    # 私有成员方法
    def __keep_single_core(self):
        print("让CPU单核运行")
# 私有成员方法不支持类外部直接访问
phone=Phone()
phone.__keep_single_core()

输出结果:
在这里插入图片描述
私有成员变量不支持类外部直接访问:

# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
    # 私有成员变量
    __current_voltage=None   # 手机运行电压
    # 私有成员方法
    def __keep_single_core(self):
        print("让CPU单核运行")

phone=Phone()
print(phone.__current_voltage)

输出结果:
在这里插入图片描述
私有成员(包括私有成员变量和私有成员方法)可以在类的内部被类的其他成员(如方法)访问,但无法通过类的实例在外部访问。

# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
    # 私有成员变量
    __current_voltage=1   # 手机运行电压
    # 私有成员方法
    def __keep_single_core(self):
        print("CPU以单核模式运行")

    # 5G通话方法
    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()

输出结果:
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网络状态,打印输出“正在通话中”。

【分析】
对用户公开的:call_by_5g()方法
对用户隐藏的:__is_5g_enable私有变量和__check_5g私有成员

# 定义一个类,用来描述手机
class Phone:
    # 私有成员变量
    __is_5g_enable=False   # 5g状态
    # 私有成员方法
    def __check_5g(self):
        if self.__is_5g_enable:
            print("5g开启")
        else:
            print("5g关闭,使用4g网络")

    # 公开成员方法
    def call_by_5g(self):
        self.__check_5g()
        print("正在通话中")

phone=Phone()
phone.call_by_5g()

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

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

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

相关文章

48天笔试训练错题——day41

目录 选择题 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 编程题 1. 五子棋 2. Emacs计算器 选择题 1. 当发生拥塞时,TCP 有个机制,会从慢开始进行发送。 1. 把慢开始的门限值设为当前窗口的一半,即 ssthresh 1/2 * 8 4 KB 2. 把拥塞窗…

【TS】declare 全局声明方式

declare关键字 declare是描述TS文件之外信息的一种机制,它的作用是告诉TS某个类型或变量已经存在,我们可以使用它声明全局变量、函数、类、接口、类型别名、类的属性或方法以及后面会介绍的模块与命名空间。 declare关键字用来告诉编译器,某…

【C语言】关于字符串函数的使用及模拟实现(2)

一、字符串的复制 1.1 库函数strcpy的使用 在函数strcpy中,函数的返回类型为char* ,参数部分首先是指向目标地址的指针,其次是指向源地址的指针(由于源地址中内容不受影响,则可以使用const修饰),函数所需的头文件为st…

51单片机—串口

一、 串口基本认知 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单&a…

#70结构体案例1(导师,学生,成绩)

效果&#xff1a; 代码&#xff1a; #include <iostream> #include <string> using namespace std;#include "random"int get_random_num(int min,int max) {random_device rd;mt19937 gen(rd());uniform_int_distribution<> dis(min,max);int ra…

C语言实现常见O(N^2)的排序算法

目录 1.排序的概念及常见排序算法 1.1排序的概念 1.2常见的排序算法 2.常见O(N^2)排序算法的实现 2.1插入排序 2.1.1基本思想 2.1.2直接插入排序 2.1.2.1直接插入排序的特性 2.1.2.2直接插入排序算法实现 2.2选择排序 2.2.1基本思想 2.2.2直接选择排…

【电脑基础硬件】磁盘阵列

磁盘阵列 一、磁盘阵列概述作用&#xff1a;RAID级别&#xff1a; 二、Raid0Raid1 一、磁盘阵列概述 磁盘阵列&#xff08;Disk Array&#xff09;是一种将多个独立的磁盘驱动器组合起来形成一个逻辑单元的技术&#xff0c;目的是为了提高存储系统的性能、可靠性和可用性。磁盘…

关于儿童编程语言

青少年通常会通过Scratch或Python开始学习编程。在这两种语言中&#xff0c;代码的编写&#xff08;或者在Scratch中是构建&#xff09;方式类似于英语&#xff0c;这使得初学者更容易学习。Scratch的一个重要卖点是对视觉和运动感知学习者非常友好。这些代码块按颜色编码&…

亚信安全获国家信息安全服务(风险评估和安全工程类)二级资质

近日&#xff0c;亚信安全荣获由中国信息安全测评中心颁发的《国家信息安全测评信息安全服务资质证书—风险评估二级》和《国家信息安全测评信息安全服务资质证书—安全工程类二级》资质。亚信安全凭借综合实力和优秀的技术能力&#xff0c;成为为数不多的获得国家信息安全服务…

PXE无人值守

PXE介绍 预启动执行环境&#xff08;Preboot eXecution Environment&#xff0c;PXE&#xff09;也被称为预执行环境&#xff0c;提供了一种使用网络接口&#xff08;Network Interface&#xff09;启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备&#…

支持跨设备操作,自带横向霍尔感应滚轮,雷柏MT760系列鼠标上手

日常工作中&#xff0c;确实很需要一只专为商务办公设计的鼠标&#xff0c;这类鼠标通常会有更低调的外观&#xff0c;同时具备静音按键之类的设计&#xff0c;能够为工作带来更多的方便。我最近上手了雷柏MT760和MT760 Mini。这两款鼠标虽然尺寸不同&#xff0c;但共享了相同的…

12.upload-labs靶场通关详解(11~17)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、Pass11&#xff08;白名单&#xff1a;get00截断&#xff09;2、Pass12&#xff08;白名单&#xff1a;post00截断&#xff09;3、Pass13&#xff08;图片马绕过…

封装组件之使用vue3封装input框并显示联想数据功能

新建Input.vue 定义input框及相关事件 <inputtype"text"v-model"query"input"onInput"blur"hideSuggestions"focus"onInput"/> input输入事件、blur失去焦点、focus获取焦点 //当输入内容时才显示ul内容 const onI…

优化if-else的11种方案

优雅永不过时&#xff01; 1. 使用早返回&#xff08;Early Return&#xff09;&#xff1a;尽可能早地返回&#xff0c;避免嵌套的if-else。 优化前&#xff1a; public class NoEarlyReturnExample {public boolean hasPositiveNumber(int[] numbers) {boolean foundPositi…

自然语言常见面试题及答案(21~40)

Reply&#xff1a;面试题 获取资料下载 文章目录 21. 介绍一下信息抽取在自然语言处理中的重要性和实现方式。22. 谈谈你对预训练语言模型&#xff08;如 BERT、GPT 等&#xff09;的认识和应用经验。23. 简述一下情感分析的流程和方法。24. 对于机器翻译任务&#xff0c;你了…

自旋锁(Spinlock):轻量级锁机制

自旋锁&#xff08;Spinlock&#xff09;&#xff1a;轻量级锁机制 1、什么是自旋锁&#xff1f;2、优势3、局限4、实现与应用 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java并发编程中&#xff0c;自旋锁以其独特的非阻塞特性脱颖而…

WordPress原创插件:Category-id-list分类ID显示查看

WordPress原创插件&#xff1a;Category-id-list分类ID显示查看 插件设置位置在工具栏

STL | string C++底层实现

目录 前言 总代码 string结构框架搭建 三个成员 构造 析构 拷贝构造、赋值重载 和 swap size、c_str、operator[ ] string迭代器的简单实现 扩容 reserve insert&#xff08;插入字符和字符串&#xff09; 单字符 字符串 push_back、append、 erase 删除 find查找 …

C++计算字符串中大写、小写、数字、空格、其他字符的个数

#include <iostream> #include <array> using namespace std;int main() {cout << "请输入一个字符串:";string str;getline(cin,str);int daxie0,xiaoxie0,num0,space0,other0;int lenstr.size();for(int i0;i<len;i){if(str[i]>A&&…

Oracle认证1Z0-071线上考试注意事项

目录 一、前言二、回顾过往战绩第一次 裸考&#x1f412;第二次 背题库硬考&#xff01;&#x1f412;第三次 软件卡住&#xff0c;寄&#xff01;&#x1f648;第四次 汇总纠错&#xff0c;通过&#xff01;&#x1f31a; 三、考试流程四、考试注意事项1. 是否需要科学上网2. …