Python 私有变量和私有方法介绍
Python 私有变量和私有方法介绍
关于 Python 私有变量和私有方法,通常情况下,开发者可以在方法或属性名称前加上单下划线(_),以表示该方法或属性仅供内部使用,但这只是一种约定,并没有强制执行禁止外部访问。要真正实现“私有”的效果,可以在方法或属性名称前加上双下划线(__),在 Python 内部自动将方法或属性名称改写,这样就无法从类的外部直接访问了,但仍然可以通过在其前面添加单下划线和类名的方式来访问。
Python 私有变量
在Python中,私有变量是指在类定义中以两个下划线(__)开头的变量。这些变量被认为是私有的,因为它们不能从类的外部直接访问。
【Python 私有变量的官方说明 https://docs.python.org/zh-cn/3/tutorial/classes.html#private-variables 】
Python将双下划线作为前缀来对属性进行名称修饰,使得这些属性在类的外部无法通过简单的名称访问。但是,在类的内部,这些属性可以像其他属性一样使用,只不过需要使用特殊的名称来引用它们。
例如:
class MyClass:def __init__(self):self.__private_var = 42def get_private_var(self):return self.__private_varmy_object = MyClass()
print(my_object.get_private_var()) # 输出结果:42
#print(my_object.__private_var) # 报错:AttributeError: 'MyClass' object has no attribute '__private_var'
print(my_object._MyClass__private_var)# 输出结果:42 ,可以这样访问私有变量,但是不建议
在上述代码中,我们定义了一个名为 MyClass 的类,并在其构造函数 __init__() 中设置了一个私有变量 __private_var。然后,我们定义了一个名为 get_private_var() 的方法,该方法返回私有变量 __private_var 的值。
当我们创建一个新的 MyClass 实例并调用 get_private_var() 方法时,我们可以成功地获取私有变量的值并输出它。但是,当我们尝试直接访问私有变量 __private_var 时,Python会抛出 AttributeError 异常,因为该属性不是公共的,不能从类的外部直接访问。
需要注意的是,在Python中,私有属性不是真正的私有。它们仍然可以通过特殊的名称来访问。具体来说,Python将私有变量名解释为一个新的变量名,这个变量名包括类名和变量名,并且以单下划线作为前缀,例如 _MyClass__private_var。虽然这种方式可以在某些情况下访问私有变量,但是强烈建议不要这样做,因为这会使你的代码更难理解和维护。
Python私有方法
在 Python 中,可以使用双下划线(__)来定义“私有”方法,这些方法只能在类的内部访问。具体来说,双下划线开头的方法名称会被 Python 解释器重命名为 _ClassName__my_private_method 的形式,因此在外部无法直接调用。
例如:
class MyClass:def __init__(self):self.__my_private_var = 42def __my_private_method(self):print("This is a private method.")print(f"The value of my_private_var is {self.__my_private_var}.")obj = MyClass()
# obj.__my_private_method() # 报错:AttributeError: 'MyClass' object has no attribute '__my_private_method'
obj._MyClass__my_private_method() # Output: This is a private method. The value of my_private_var is 42.
在这个示例中,我们定义了一个 MyClass 类,并在其中定义了一个“私有”方法 __my_private_method,该方法只能在类的内部访问。然后,我们创建了一个 MyClass 的对象并将其赋给变量 obj,但如果尝试直接调用 obj.__my_private_method(),会导致 AttributeError 错误,因为该方法是“私有”的。相反,我们可以通过 _MyClass__my_private_method() 方法来间接地调用该方法。
尽管在 Python 中可以通过特殊的名称来访问“私有”方法,但这并不是一种好的编程风格。
附录
python/类和实例-访问限制https://www.codenong.com/cs106668667/
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解https://www.jb51.net/article/157112.htm
相关文章:
Python 私有变量和私有方法介绍
Python 私有变量和私有方法介绍 关于 Python 私有变量和私有方法,通常情况下,开发者可以在方法或属性名称前加上单下划线(_),以表示该方法或属性仅供内部使用,但这只是一种约定,并没有强制执行禁…...
Kotlin Lambda表达式和匿名函数的组合简直太强了
Kotlin Lambda表达式和匿名函数的组合简直太强了 简介 首先,在 Kotlin 中,函数是“第一公民”(First Class Citizen)。因此,它们可以被分配为变量的值,作为其他函数的参数传递或者函数的返回值。同样&…...
uniapp 小程序 获取手机号---通过前段获取
<template><!-- 获取手机号,登录内容 --><view><!-- 首先需要先登录获取code码,然后才可以获取用户唯一标识openid以及会话密钥及用于解密获取手机的加密信息 --><view click"login">登录</view><view…...
面板安全能力持续增强,新增日志审计功能,1Panel开源面板v1.3.0发布
2023年6月12日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.3.0版本。 在这一版本中,1Panel进一步增强了安全方面的能力,包括新增SSH配置管理、域名绑定和IP授权支持,以及启用网站防盗链功能。此外,该版本…...
k8s学习-CKS考试必过宝典
目录 CKS考纲集群安装:10%集群强化:15%系统强化:15%微服务漏洞最小化:20%供应链安全:20%监控、日志记录和运行时安全:20% 报名模拟考试考试注意事项考前考中考后 参考 CKS考纲 集群安装:10% 使…...
jmeter如何将上一个请求的结果作为下一个请求的参数
目录 1、简介 2、用途 3、下载、简单应用 4、如何将上一个请求的结果作为下一个请求的参数 1、简介 在JMeter中,可以通过使用变量来将上一个请求的结果作为下一个请求的参数传递。 ApacheJMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测…...
JAVA如何学习爬虫呢?
学习Java爬虫需要掌握以下几个方面: Java基础知识:包括Java语法、面向对象编程、集合框架等。 网络编程:了解HTTP协议、Socket编程等。 HTML、CSS、JavaScript基础:了解网页的基本结构和样式,以及JavaScript的基本语…...
距离保护原理
距离保护是反映故障点至保护安装处的距离,并根据距离的远近确定动作时间的一种保护。故障点距保护安装处越近,保护的动作时间就越短,反之就越长,从而保证动作的选择性。测量故障点至保护安装处的距离,实际上就是用阻抗…...
从微观世界的RST包文视角助力企业网络应用故障排查和优化
1. 前言 随着互联网的普及和发展,各行业的业务和应用越来越依赖于网络。然而,网络环境的不稳定性和复杂性使得出现各种异常现象的概率变得更高了。这些异常现象会导致业务无法正常运行,给用户带来困扰,甚至影响企业的形象和利益。…...
企业微信开发,简单测试。
企业微信开发,参考文档: https://github.com/wechat-group/WxJava/wiki...
element日期选择设置默认时间el-date-picker
<el-date-pickerv-model"rangeDate"style"width:350px"type"daterange"value-format"yyyy-MM-dd"change"dataChange"start-placeholder"开始日期"end-placeholder"结束日期"></el-date-picker…...
AB32VG:SDK_AB53XX_V061(3)IO口复用功能的补充资料
文章目录 1.IO口功能复用表格2.功能映射寄存器 FUNCTION03.功能映射寄存器 FUNCTION14.功能映射寄存器 FUNCTION2 AB5301A的官方数据手册很不完善,没有开放出来。我通过阅读源码补充了一些关于IO口功能复用寄存器的资料。 官方寄存器文档:《 AB32VG1_Re…...
UnityVR--组件10--UGUI简单介绍
目录 前言 UI基础组件 1. Canvas 2. EventSystem 3. Image 4. Text/TextMeshPro/InputField 5. Button控件 其他 前言 UGUI是Unity推出的新的UI系统,它与Unity引擎结合得更紧密,并拥有强大的屏幕自适应和更简单的深度处理机制,更容易使用和…...
k8s 探针
1.前言 Kubernetes探针(Probe)是用于检查容器运行状况的一种机制。探针可以检查容器是否正在运行,容器是否能够正常响应请求,以及容器内部的应用程序是否正常运行等。在Kubernetes中,探针可以用于确定容器的健康状态,如果容器的健…...
【爬虫】4.4 Scrapy 爬取网站数据
目录 1. 建立 Web 网站 2. 编写 Scrapy 爬虫程序 为了说明 scrapy 爬虫爬取网站多个网页数据的过程,用 Flask 搭建一个小型的 Web 网站。 1. 建立 Web 网站 (1)books.html <!DOCTYPE html> <html lang"en"> <h…...
PureComponent和Component的区别和底层处理机制
PureComponent和Component都是React中的组件类,但它们在实现细节和使用上有些差别。 Component是React中定义组件的基类,它的shouldComponentUpdate方法默认返回true,也就是说,每次调用setState或forceUpdate方法都会引发组件重新…...
python3 爬虫相关学习9:BeautifulSoup 官方文档学习
目录 1 BeautifulSoup 官方文档 报错暂时保存 2 用bs 和 requests 打开 本地html的区别:代码里的一段html内容 2.1 代码和运行结果 2.2 用beautiful 打开 本地 html 文件 2.2.1 本地html文件 2.2.2 soup1BeautifulSoup(html1,"lxml") 2.3 用reque…...
物联网Lora模块从入门到精通(九)Flash的读取与存储--结题
一、前言 这将是"物联网Lora模块从入门到精通"系列的最后一篇文章,相信各位同僚通过前面八篇文章的分享已经极好的掌握了Lora模块的编程,本文的Flash的读取与存储将是Lora模块开发的最后一块,感谢大家的陪伴与支持! 希望…...
STM32MP157_PRO开发板的第一个驱动程序
文章目录 目的:为什么编译驱动程序之前要先编译内核?编译内核编译设备树编译安装内核模块编译内核模块安装内核模块到 Ubuntu 的NFS目录下备用 安装内核和模块到开发板上编译 led 驱动在开发板安装驱动模块下载驱动程序安装驱动模块 目的: 在…...
你“被”全链路了么?全链路压测实践之理论
要说当下研发领域最热门的几个词,全链路压测 肯定跑不了。最近的几次大会上,也有不少关于全链路的议题。之前有朋友在面试过程中也有被问到了什么是全链路压测,如何有效的开展全链路压测。今天我们就来聊聊全链路压测,但本文不会涉…...
基于Tensorflow+SDD+Python人脸口罩识别系统(深度学习)含全部工程源码及模型+视频演示+图片数据集
目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境Anaconda 环境搭建 模块实现1. 数据预处理2. 模型构建及算法实现3. 模型生成 系统测试1. 训练准确率2. 运行结果 工程源代码下载其它资料下载 前言 在当今全球范围内,新冠疫情对我们的生活方式带来了…...
abc200 D 鸽巢原理
题意:https://www.luogu.com.cn/problem/AT_abc200_d 思路:对于一个序列最多有多少个模数,其实就是子序列个数,所以当子序列个数超过200是那么答案一定存在,那么我们就可以直接枚举了,所以我们直接枚举前八…...
QT day1 (图形界面设计)
要求: 功能函数模块 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {qDebug("%s","hello world");//qDebug() << &qu…...
JS逆向系列之猿人学爬虫第9题-动态cookie2
文章目录 目标参数流程分析js代码Python调用测试目标 https://match.yuanrenxue.cn/match/9参数流程分析 二次请求cookie携带m 第一次请求响应内容格式化之后是这样的: < body > < script src = "/static/match/safety/match9/udc.js" > <...
Java ~ Reference ~ FinalizerHistogram【总结】
前言 文章 相关系列:《Java ~ Reference【目录】》(持续更新)相关系列:《Java ~ Reference ~ FinalizerHistogram【源码】》(学习过程/多有漏误/仅作参考/不再更新)相关系列:《Java ~ Referenc…...
【MySQL】一文带你了解SQL
🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指…...
python基础学习3【NumPy矩阵与通用函数【矩阵相乘+平方+广播机制+转置】+ save、load、sort、repeat、unique、鸢尾花1】
NumPy矩阵与通用函数 a np.mat([[1,2],[3,4]])#生成矩阵b np.matrix([[1,7],[6,4]])np.bmat("a b") 矩阵的运算 矩阵特有属性: 属性 说明 T自身转置H共轭转置I逆矩阵A自身数据的二维数据视图 例如: np.matrix(a).T 矩阵相乘:…...
【Spring学习之更简单的读取和存储Bean对象】教会你使用五大类注解和方法注解去存储 Bean 对象
前言: 💞💞今天我们依然是学习Spring,这里我们会更加了解Spring的知识,知道Spring是怎么更加简单的读取和存储Bean对象的。也会让大家对Spring更加了解。 💟💟前路漫漫,希望大家坚持…...
微客云原生淘宝客APP小程序系统如何定制
淘宝是中国最大的电商网站,而淘宝的火热,也兴起了一个全新的行业,淘宝客。就是帮助淘宝商家推广商品的一种职业。目前淘宝每年有百分之10的销售业绩都是通过淘宝客贡献的,所以说淘宝客的市场越来越大。但是淘宝客要推广自己的产品…...
QT CTK插件开发(六) 多对一插件
CTK在软件的开发过程中可以很好的降低复杂性、使用 CTK Plugin Framework 提供统一的框架来进行开发增加了复用性 将同一功能打包可以提供多个应用程序使用避免重复性工作、可以进行版本控制提供了良好的版本更新迭代需求、并且支持动态热拔插 动态更新、开发更加简单快捷 方便…...
eclipse sdk做网站/微营销推广方案
1,从spark的example中找到KafkaWordCount.scala文件复制到idea编辑器中,引入包:2,编辑configuration,(1)KafkaWordCountProducer选择KafkaWordCount.scala中的KafkaWordCountProducer方法VM options 设置为:-Dspark.masterlocal设置程序输入参数,Program arguments: localhost:…...
深圳 营销型网站公司/青岛seo公司
第一周:做点计算1.1 第一个程序Eclipse是绝大多数人的唯一选择;如何在Eclipse中编辑、编译和运行程序;详解第一个程序:程序框架、输出、出错怎么办;做点计算:如何让程序输出算术结果1.2 数据是用变量来表示…...
jquery 苹果网站/seo关键词推广价格
CentOS7下修改主机名第一种:hostname 主机名01.hostname 主机名称 这种方式,只能修改临时的主机名,当重启机器后,主机名称又变回来了。第二种:hostnamectl set-hostname <hostname>命令行中输入01.hostnamectl s…...
做购物网站怎么赚钱/seo和sem的区别与联系
NOIP2018 复盘 前言 在这里立一个可能无法实现的flag: 把NOIP从古至今(luogu上有)的每一年都写一篇复盘!!! 伏拉格综合征开始了 在复盘就不讲那些伤心的话了。 D1T1 铺设道路 考试时居然不知道这道题是原题…...
网站内页做排名/自动点击器软件
摘要自簡單來說就是可以將一個 or 多個應用包裝成一個服務,並透過 chart 的形式發佈,讓大家可以方便在 k8s 上安裝特定的服務。幾個元件的名詞Tiller server: 用來與API server溝通,使用chart在k8s cluster上建立服務Helm client: 則是用來操…...
嘉兴高端网站建设/百度推广登录平台
在上一文中,论述两个.Net Framework对null应用不够合理的例子。大家评论中,给出了不少指导性意见,这里也对.Net中null的使用规范作一下总结。 1. Empty代表瓶子是空的,null代表瓶子都没有 首先要明确你的“瓶子”是什么࿰…...