python中以 _ _ 开头的属性 和方法

在Python中,以下划线 (_) 开头的属性和方法通常被视为内部使用或私有的。而以双下划线 (__)开头并且不以双下划线结尾的属性和方法叫做“名称修饰(name mangling)”。

  1. 以单下划线 (_) 开头的属性和方法: 这种命名约定暗示着某个属性或方法是用于内部使用的,但它们并没有强制限制外部访问。这仅仅是一种约定,用来给其他程序员传达关于该属性或方法的使用意图。

  2. 以双下划线 (__)开头并且不以双下划线结尾的属性和方法: 这种命名约定用于名称修饰,将属性或方法重命名为"_类名__属性名"或"_类名__方法名"的形式。这是Python的一种名称重整机制,旨在避免子类意外覆盖父类的属性或方法。这种重命名机制使得属性或方法变得更加唯一,即使在多层继承中也能保持独立性。需要注意的是,这种名称修饰只在类的定义内部起作用,外部无法直接访问。

下面是一个示例,演示了这两种命名约定的用法:

class MyClass:def __init__(self):self._internal_var = "Internal Variable"self.__private_var = "Private Variable"def _internal_method(self):print("This is an internal method.")def __private_method(self):print("This is a private method.")def public_method(self):print("This is a public method.")self._internal_method()self.__private_method()# 创建对象并访问属性和调用方法
obj = MyClass()
print(obj._internal_var)  # 输出: Internal Variable
# print(obj.__private_var)  # 报错,无法直接访问
obj.public_method()  # 输出: This is a public method.#       This is an internal method.#       This is a private method.

Internal Variable
This is a public method.
This is an internal method.
This is a private method.
 

在上述示例中,我们定义了一个名为 MyClass 的类。该类包含一个以单下划线 (_) 开头的属性 _internal_var,和一个以单下划线 () 开头的方法 _internal_method。此外,还有一个以双下划线 (__)开头的属性 __private_var 和方法 __private_method。通过对象访问 _internal_var 属性和 public_method 方法没有问题,而直接访问 __private_var 属性会导致错误。最后,调用 public_method 方法时,内部方法 _internal_method 和私有方法 __private_method 也被执行。

需要注意的是,尽管使用命名约定可以限制对内部属性和方法的访问,但它们并不是Python语言级别的强制限制,而是一种约定。在某些情况下,仍然可以通过强制访问来获取或修改这些内部属性和方法。

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

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

相关文章

MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)

文章目录 1 准备工作1.1 下载源码1.2 测试集下载2 配置环境3 dtu数据集 重建演示3.1 重建效果查看4 补充解释4.1 bash 脚本文件超参数解释4.2 lists/dtu解释5 Meshlab查看三维点云时 ,使用技巧总结1 Meshlab查看三维点云时 ,换背景颜色2 Meshlab查看三维点云时,点云颜色很暗…

咸鱼之王俱乐部网站开发

我的俱乐部 最新兑换码 *注意区分大小写,中间不能有空格! APP666 HAPPY666 QQ888 QQXY888 vip666 VIP666 XY888 app666 bdvip666 douyin666 douyin777 douyin888 happy666 huhushengwei888 taptap666 周活动 宝箱周 宝箱说明 1.木质宝箱开启1个…

电容器件选型与应用案例

关注参数(1)容量和误差 实际电容量和标称电容量允许的最大偏差范围。在选型上注意精度等级,用字母表示:D—0.5%、F—1%、G—2%、J—5%、K—10%、M—20% (2)额定工作电压 电容器在电路中能够长期稳定、可靠工…

lintcode 1132 · 合法的三角数【中等】

题目链接,描述 https://www.lintcode.com/problem/1132 给定一个包含非负整数的数组,你的任务是计算从数组中选出的可以制作三角形的三元组数目,如果我们把它们作为三角形的边长。给定数组的长度不会超过 1000. 给定数组内的整数在 [0, 100…

2023SpringMvc和spring之八股文——面试题

概述 什么是Spring MVC?简单介绍下你对Spring MVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级 Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的 web应用分成逻辑…

【C++入门到精通】C++入门 —— deque(STL)

阅读导航 前言一、deque简介1. 概念2. 特点 二、deque使用1. 基本操作(增、删、查、改)2. 底层结构 三、deque的缺陷四、 为什么选择deque作为stack和queue的底层默认容器总结温馨提示 前言 文章绑定了VS平台下std::deque的源码,大家可以下载…

【C/C++】探索内存对齐的奥秘与优势

目录 一,前言 二,什么是内存对齐? 三,内存对齐的原理 四,内存对齐的优势 五,如何实现内存对齐?(看这节就行) 1.使用 #pragma pack 来实现内存对齐的示例 七&#…

R包开发-2.2:在RStudio中使用Rcpp制作R-Package(更新于2023.8.23)

目录 4-添加C函数 5-编辑元数据 6-启用Roxygen,执行文档化。 7-单元测试 8-在自己的计算机上安装R包: 9-程序发布 参考: 为什么要写这篇文章的更新日期?因为R语言发展很快,很多函数或者方式,现在可以使…

Yolo系列-yolov1

YOLO-V1 经典的one-stage方法 YouOnlyLookOnce,名字就已经说明了一切!把检测问题转化成回归问题,一个CNN就搞定了!可以对视频进行实时检测,应用领域非常广! 核心思想: Yolov1的核心思想是将对象…

【Docker系列】Docker-核心概念/常用命令与项目部署实践

写在前面 Docker是一种开源的容器化技术,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,从而实现快速部署和高效运行。Docker的核心概念包括镜像、容器、仓库等。本文将详细介绍Docker的基本概念、安装方法以及常用命令。 一、Doc…

搭建开发环境-WSL+Ubuntu(一键搭建开发环境)

概述 所谓工欲善其事必先利其器,搭环境往往是开发过程中卡出很多初学者的拦路虎。 对于很多老鸟来说,很多东西都已经习惯成自然,也就没有刻意和初学者说。但对于很多初学者,却是受益良多。 这个系列,先从操作系统开始…

前端工程化

早期混合开发: 1.沟通成本高 2.分工不明确 3.不变管理 4.不便维护和管理 前后端分离开发: 前端开发--------------(请求/响应)------------后端开发【依照接口文档(原型需求)】 需求分析-->接口定义--&g…

前端需要理解的工程化知识

1 Git 1.1 Git 常见工作流程 Git 有4个区域:工作区(workspace)、index(暂存区)、repository(本地仓库)和remote(远程仓库),而工作区就是指对文件发生更改的地方&#xff…

第一个VUE程序?

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title></head> <body><div id"app">{{message}} </div><!-- 1.导入Vue.js --> <script s…

matlab 根据索引提取点云

目录 一、语法二、说明三、名称-值对应参数1、输入参数2、输出参数四、代码示例五、结果展示六、参考链接一、语法 ptCloudOut = select(ptCloud,indices) ptCloudOut = select(ptCloud,row,column

如何使用HTML5新增的标签来优化SEO?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用HTML5新增的标签来优化SEO&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对…

【kubernetes】使用kubepshere部署中间件服务

KubeSphere部署中间件服务 入门使用KubeSphere部署单机版MySQL、Redis、RabbitMQ 记录一下搭建过程 (内容学习于尚硅谷云原生课程) 环境准备 VMware虚拟机k8s集群&#xff0c;一主两从&#xff0c;master也作为工作节点&#xff1b;KubeSphere k8skubesphere devops比较占用磁…

数据结构(基本概念和术语1)

数据、数据元素、数据项和数据对象 1.数据(Data) 是能输入计算机且能被计算机处理的各种符号的集合 信息的载体 是对客观事物符号化的表示能够被计算机识别、存储和加工 包括: 数值型的数据:整数、实数等 非数值型的数据:文字、图像、图形、声音等 2.数据元素(Data Eleme…

C#---第十九课:不同类型方法的执行顺序(new / virtual / common / override)

本文介绍不同类型的方法&#xff0c;在代码中的执行顺序问题&#xff1a; 构造方法普通方法&#xff08;暂用common代替&#xff09;、虚方法&#xff08;Virtual修饰&#xff09;、New方法&#xff08;new修饰&#xff09;三个优先级相同overide方法&#xff08;会替换virtual…

前端面试:【跨域与安全】跨域问题及解决方案

嗨&#xff0c;亲爱的Web开发者&#xff01;在构建现代Web应用时&#xff0c;跨域问题和安全性一直是不可忽视的挑战之一。本文将深入探讨跨域问题的背景以及解决方案&#xff0c;以确保你的应用既安全又能与其他域名的资源进行互操作。 1. 什么是跨域问题&#xff1f; 跨域问…