Python中定义和使用类的私有属性和方法

news2024/11/25 22:30:22

类的私有属性和方法指的是只能在类的内部使用,而不能在类外使用的属性和方法。

1 单下划线方式

在定义类的属性和方法时,在名字前面加一个下划线,此时表示该属性或方法只能在类的内部使用,而不能在类的外部使用,代码如图1所示。

图1 定义类的私有属性

从图1中可以看出,在类Myclass中定义了两个实例变量,“a”和“_b”。其中变量“a”是公共变量,变量“_b”是私有变量;第5-8行定义了类的两个方法getb()和setb(),分别用来获取和设置变量“_b”的值。使用变量“a”和“_b”的代码如图2所示。

图2 使用变量“a”和“_b”的代码

其中,第10行实例化了Myclass类的一个实例c,对于类的公共变量“a”,可以通过第11-12的代码在类的外部进行设置和获取,而对于私有变量_b,则不能像a一样在类的外部设置和获取,而需要像代码13-14行,通过调用类的函数,在类的内部进行设置和获取。设置类的私有方法与设置类的私有变量类似,只需在方法名前加入一个下划线即可。

使用本方法设置的类的私有变量和方法只是约定俗成的,告诉代码阅读者该属性和方法是私有的,但是并不是严格的语法要求。也就是说,也可以通过像访问和设置共有属性那样访问和设置私有属性,如图3所示。

图3 像访问和设置共有属性那样访问和设置私有属性

2 双下划线方式

2.1 定义和使用私有属性的正确方法

也可以在类的属性和方法名前加入两个下划线将其设置为私有,代码如图4所示。

图4 定义类的私有属性

其中,“a”是类的共有属性,“__b”是类的私有属性,可以在getb()和setb()中获取和设置私有属性“__b”。如果在类外使用“__b”,此时程序会报错,如图4和图5所示。

图4 在类外使用私有变量“__b”的错误代码

图5 报错信息

从图4和图5中可以看出,c是Myclass类的实例,通过该实例在类外调用私有属性“__b”时,程序的报错信息是Myclass类没有“__b”属性。也就是说,在属性名前加两个下划线的方法,从语法上指定了类的私有属性。

要想在类外设置和获取私有变量“__b”,可以通过如图6所示代码。

图6 在类外使用私有变量“__b”的正确代码

getb()和setb()是类Myclass的共有方法,因此可以在类外使用,在这两个方法内部来设置和获取私有方法,从而达到在类外使用私有属性的目的。同理,也可以在方法名前加上两个下划线将其设置为私有方法。

2.2 原因分析

通过如图7所示的代码,查看实例c的属性和方法,得到的结果如图8所示。

图7 查看实例c的属性和方法的代码

图8 实例c的属性和方法

从图8②处可以看出,“a”、“getb”和“setb”分别表示实例的公共属性和公共方法,而图8①的“_Myclass__b”表示实例的私有属性“__b”。也就是说,对于前缀是两个下划线的属性,类会对其进行重命名,将“_类名”加到私有属性名之前。

相关链接1 类的这种重命名行为,叫做name mangling,也就是名称修饰,为了避免类被继承时,与子类的属性发生命名冲突。

因此,可以通过图9所示的代码访问实例的私有属性。

图9 访问实例的私有属性

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

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

相关文章

2024生成式AI商业落地白皮书_火山引擎

更多详细内容请下载资源 2024生成式AI商业落地白皮书-火山引擎

字符串函数———C语言

1. 求字符串的长度 strlen 原型&#xff1a;size_t strlen(const char *str); 原理&#xff1a;字符串以\0作为结束标志&#xff0c;strlen函数返回的是在字符串中\0前面出现的字符个数&#xff08;不包括\0&#xff09;参数指向的字符串必须要以\0结束 #include <stdio…

配置策略路由实战 附带基础网络知识

背景 作为一个软件开发人员&#xff0c;不可能做到只负责业务开发工作&#xff0c;一旦功能上线或者系统切换就会遇到非常多考验开发人员个人能力的场景&#xff0c;网络调整就是非常重要的一个方面&#xff0c;如果你在系统上线的过程中无法处理一些简单的网络问题或者听不懂…

SpringBoot的内置缓存以及整合第三方缓存

一、什么是缓存 企业级应用主要作用是信息处理&#xff0c;当需要读取数据时&#xff0c;由于受限于数据库的访问效率&#xff0c;导致整体系统性能偏低。 应用程序直接与数据库打交道&#xff0c;访问效率低 为了改善上述现象&#xff0c;开发者通常会在应用程序与数据库之间建…

【避雷】Fomepay跑路大揭秘!还我q来!

震惊&#xff01;Fomepay公司一夜之间消失无踪&#xff0c;用户资金不翼而飞&#xff01; 首先&#xff0c;讲一下我自己的经历&#xff0c;想使用fomepay开卡订阅gpt&#xff0c;充值两百多后&#xff0c;想提现客服直接跑路&#xff01;充多少吞多少&#xff01;骗子公司&am…

Linux pstree 命令详解

pstree 命令是一个在 Unix-like 系统中用于以树状图的形式显示当前运行的进程的命令。这种展示方式比简单的列表&#xff08;ps查看&#xff09;更加直观&#xff0c;有助于用户快速理解进程的层次结构和父子关系。 在诊断系统问题时&#xff0c;pstree 可以帮助确定哪些进程是…

预警先行,弯道哨兵让行车更安全

预警先行&#xff0c;弯道哨兵让行车更安全”这句话深刻体现了现代交通安全理念中预防为主、科技赋能的重要性。在道路交通中&#xff0c;尤其是复杂多变的弯道区域&#xff0c;交通事故的发生率往往较高&#xff0c;因此&#xff0c;采取有效的预警措施和引入先进的交通辅助设…

windows bash获取一个目录下所有的文件

在Windows系统中&#xff0c;我们可以使用命令行工具来获取文件夹下的所有文件名。具体操作如下&#xff1a; 1. 打开命令提示符&#xff08;WinR&#xff0c;输入cmd&#xff0c;回车&#xff09;&#xff1b; 2. 进入需要提取文件名的文件夹&#xff08;使用cd命令&#xf…

从0开始搭建个人博客《第十一期:优化网站访问速度》

目录 一、背景说明 二、Nginx性能优化 &#xff08;一&#xff09;文件句柄 1.系统全局性修改和用户局部性修改 2.进程局部性修改 &#xff08;二&#xff09;CPU亲和配置 1.设置工作进程数 2.设置连接数 &#xff08;三&#xff09;事件处理模型优化 &#xff08;四&…

VisualStudio:模块概念、引用概念及方法、Debug与Release说明

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 今天学习VisualStudio软件的相关内容&#xff0c;以下为学习笔记。 01 模块的概念 模块通常是按照功能划分组成的各个类库或可启动项。 一个模块可以是一个类库&#xff0c;也可以是多个类库&#xff0c;还可以包括…

【机器学习】经典CNN架构

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 经典CNN架构1. 引言2. LeNet3. AlexNet4. VGGNet5. GoogLeNet(Inception)6. Res…

世上最简单的安装jenkins

注意&#xff1a;本次安装的jenkins只支持jdk1.8版本 下载地址&#xff08;jenkins版本2.346&#xff09;&#xff1a; https://mirrors.jenkins-ci.org/war/2.346/ 1、在本地电脑jenkins.war包存放地址里面新建run.bat文件 内容&#xff1a;java -jar D:\install\jenkins\…

宝塔安装python新版本并使用

情况说明&#xff1a; 不是切换宝塔面板默认的 python 而是单独安装一个python版本&#xff0c;然后通过 终端 或者PHP的 shell_exec 方法可以调用。我当前宝塔面板默认的python版本是3.6.8&#xff0c;由于需要用到的python库只支持3.8以上&#xff0c;所以要安装新的python版…

【Java】——Java程序实现学生成绩输入与等级划分

在本文中&#xff0c;我们将介绍如何使用Java编写一个简单的程序&#xff0c;用于输入学生的成绩并划分等级。这个程序可以实现以下功能&#xff1a; 输入学生人数。输入每个学生的成绩。计算最高分。根据最高分划分成绩等级。输出每个学生的分数和对应的等级。 首先&#xff…

SAP B1 三大基本表单标准功能介绍-业务伙伴主数据(四)

背景 在 SAP B1 中&#xff0c;科目表、业务伙伴主数据、物料主数据被称为三大基本表单&#xff0c;其中的标准功能是实施项目的基础。本系列文章将逐一介绍三大基本表单各个字段的含义、须填内容、功能等内容。 附上 SAP B1 10.0 的帮助文档&#xff1a;SAP Business One 10…

数学建模学习(115):主成分分析(PCA)与Python实践

文章目录 一.主成分分析简介1.1 数学背景与维度诅咒1.2 PCA的定义与应用二.协方差矩阵——特征值和特征向量三.如何为数据集选择主成分数量四.特征提取方法五.LDA——与PCA的区别六.PCA的应用七.PCA在异常检测中的应用八.总结一.主成分分析简介 1.1 数学背景与维度诅咒 主成成…

【Python爬虫】教你追剧看电影不求人!python爬虫代码教你爬取各平台视频,小白也能学会!附源码

看剧看一半不是VIP就是svip&#xff0c;正当我们看的津津有味的时候&#xff0c;让你冲米弹窗出来了&#xff01;&#xff01;&#xff01; 对于大家来说&#xff0c;想看续集&#xff0c;都是全凭实力刷续集。 如果这时候你会Python的话&#xff0c;那就不会有这些烦恼了&…

安卓开发中的Jetpack Compose

本文内容总结自郭神的jetpack compose专栏 &#xff0c;整理自学&#xff0c;未完持续... 一、了解Jetpack Compose Compose是一个由Google Android团队官方推出的声明式UI框架&#xff0c;Compose也是属于AndroidX的一部分&#xff0c;它的本质就是用来编写界面以及处理与用户…

【数据结构】二叉树的深度理解

&#x1f36c;个人主页&#xff1a;Yanni.— &#x1f308;数据结构&#xff1a;Data Structure.​​​​​​ &#x1f382;C语言笔记&#xff1a;C Language Notes 前言 在之前学习了二叉树的基本概念&#xff0c;但二叉树有着更深入知识理解&#xff0c;这篇文章可以帮助大…

Java语言程序设计——篇十六

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;&#x1f333;&…