Python中的名称修改和特殊属性

在 Python 中,以双下划线(__)开头但不以双下划线结尾的变量主要用于类的私有属性,这种命名方式被称为名称修饰(name mangling)。名称修饰会将变量名转换为类名和变量名的组合,从而避免在子类中发生意外覆盖。

一.Python中的名称修饰

1.名称修饰的例子

以下是一个示例,展示了如何使用名称修饰来定义私有变量:

class MyClass:def __init__(self, value):self.__value = value  # 名称修饰为 _MyClass__valuedef get_value(self):return self.__valueobj = MyClass(10)
print(obj.get_value())  # 输出:10
# 直接访问会报错,因为名称被修饰了
# print(obj.__value)  # AttributeError: 'MyClass' object has no attribute '__value'# 可以通过 _类名__变量名 的方式访问
print(obj._MyClass__value)  # 输出:10

2.为什么使用名称修饰

(1)避免名称冲突:在子类中定义相同名称的变量时,可以避免与父类的私有变量发生冲突。
(2)信息隐藏:虽然 Python 并没有严格的访问控制,但名称修饰提供了一种弱约定,以表明该变量不应该在类外部直接访问。

二.Python中的特殊属性

1.魔术方法

除了私有变量,Python 类还使用一些特殊属性,这些属性以双下划线开头和结尾,通常称为魔术方法(magic methods)或双下划线方法(dunder methods)。这些方法和属性在类的行为定义中起着重要作用。

常见的魔术方法包括:

  • __init__: 对象初始化方法(构造函数)
  • __str__: 返回对象的字符串表示,适合用户阅读
  • __repr__: 返回对象的官方字符串表示,适合开发者阅读
  • __len__: 返回对象的长度
  • __getitem__: 允许对象使用索引操作

2.特殊属性示例

class Example:def __init__(self, name):self.__name = namedef __str__(self):return f"Example object with name: {self.__name}"def __repr__(self):return f"Example('{self.__name}')"def __len__(self):return len(self.__name)def __getitem__(self, index):return self.__name[index]example = Example("Python")
print(str(example))  # 输出:Example object with name: Python
print(repr(example))  # 输出:Example('Python')
print(len(example))  # 输出:6
print(example[0])  # 输出:P

总结来说,以双下划线开头的变量在 Python 中用于实现私有属性,通过名称修饰避免名称冲突。魔术方法则定义了对象的特殊行为,可以通过自定义这些方法来增强类的功能。

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

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

相关文章

若依安装和初始化教程(傻瓜教程 一步一步走)

1、若依的安装: 1、找到若依官方网站并选择若依的前后端分离版本 2、点击克隆 然后选择http进行复制 3、打开idea 如果有打开的项目就先关闭项目,然后就会自动弹出下面第二张图片,接着按照流程走就可以 到此若依的下载就成功了 2、若依项目…

如何判断代码是否是在UPDATE TASK的Session中执行?

1. 背景 有时我们想控制ABAP代码在UPDATE TASK中的逻辑,例如某些逻辑执行,某些逻辑不执行。 那么,我们应该如何判断当前代码运行的环境呢?也即,怎么知道一段运行时代码是运行在当前的ABAP session中,还是…

IDEA设置代码提示忽略大小写

一、设置代码提示为忽略大小写 IDEA代码提示默认是区分大小写的,设置为提示忽略大小写: Setting——Editor——Code Completion 如图

智慧金融-数据可视化

智慧金融-数据可视化 导入所需的库 import numpy as np import numpy_financial as npf import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[font.sans-serif][FangSong] mpl.rcParams[axes.unicode_minus]False单图曲线图 r 0.05 # 贷款的年利率 n 30…

字符串哈希详解,单hash,双hash,滚动哈希

一、字符串哈希 1.1 基本概念 字符串哈希 将不同的字符串映射成不同的整数。 思想:将字符串映射成一个 p进制数字。 我们定义如下哈希函数: h a s h ( s ) ∑ i 1 n s [ i ] p n − i ( m o d M ) 其中 s 为长度为 n 的字符串,下标从…

【考研408操作系统】最容易理解的知识体系-文件管理-面向人类管理

苏泽 “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家 我将以全新的视角用两篇文章梳理完考研计算机当中关于“文件管理”这个部分的考点的所有内容 以下是我整理的知识点思维导图 目录 我将以全新的视角用两篇文章梳理完考研…

代码随想录算法训练营第三十天

56. 合并区间 这道题跟452. 用最少数量的箭引爆气球 (opens new window)和 435. 无重叠区间 (opens new window)都是一个套路。 回了上面两个这道题并不难 这题主要就是发现重叠后更新一下当前元素的起始范围 if (intervals[i][0] < intervals[i-1][1]) {intervals[i][0…

和鲸101计划夏令营火热进行中!北中医助阵医学数据探索

上周&#xff0c;和鲸社区 2024 夏令营已经正式开营&#xff01; 从 2021 年开始&#xff0c;和鲸社区在每年暑假期间都会为大家提供集中化、系统化的数据科学相关的技能实践和培训&#xff0c;每年都有几千名同学借此机会积累宝贵的实战经验&#xff0c;丰富个人简历作品&…

阅读笔记17:METAPHOR: Metabolic evaluation for mouse blastocysts and oocytes

题目:METAPHOR: Metabolic evaluation through phasor-based hyperspectral imaging and organelle recognition for mouse blastocysts and oocytes 作者:Albert Parraa,1, Denitza Denkovaa,1 ID , Xavier P. Burgos-Artizzua,b,1 ID , Ester Arocaa, Marc Casalsa ID , Am…

Java学习笔记整理: 关于swagger2,定时器使用 2024/7/12;

swagger2 简介: Swagger2 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化Restful风格的web服务&#xff0c;现在我们使用spring boot 整合它。 作用: insert接口/select接口的文档在线自动生成; 使用 访问地址swagger接口文档: 第一种: http://localhost:808…

DR模式介绍

DR模式 lvs的三种模式 nat&#xff1a;地址转换 DR模式&#xff1a;直接路由模式 tun&#xff1a;隧道模式 DR模式的特点 调度器在整个lvs集群当中是最重要的&#xff0c;在nat模式下&#xff0c;即负责接受请求&#xff0c;同时根据负载均衡的算法转发流量&#xff0c;响…

2025 百度提前批校招内推

百度2025校园招聘内推开始啦&#xff0c;被推荐人可以免笔试直接面试&#xff0c;提前批结果不影响校招&#xff0c;机会1&#xff0c;还可直推心仪部门&#xff0c;可扫描下面二维码或点击链接进行投递&#xff0c;快来投递你心仪的职位吧&#xff08; 网申链接地址 &#xff…

Linux 04:进程概念

1. 操作系统(Operator System) 概念 任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括&#xff1a; 内核&#xff08;进程管理&#xff0c;内存管理&#xff0c;文件管理&#xff0c;驱动管理&#xff09;。其他程序…

微信小程序毕业设计-高校校园交友系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

使用引用 XML 文件来优化 EtherCAT ESI 文件的描述

使用引用 XML 文件来优化 EtherCAT ESI 文件的描述 在 EtherCAT 系统中&#xff0c;ESI (EtherCAT Slave Information) 文件是描述 EtherCAT 从设备属性和行为的重要文件。随着系统复杂度的增加&#xff0c;ESI 文件的内容可能会变得非常庞大和冗余。为了优化这些文件&#xf…

仕考网:公务员考试面试时间一般多长?

公务员考试主要分为笔试与面试两个阶段&#xff0c;其中面试是笔试通过的下一关&#xff0c;面试的具体安排通常由相关考试机构或招录单位负责发布并通知考生。 公务员面试的持续时间一般在30分钟至1小时之间&#xff0c;具体时长可能因地区和招录单位的不同而有所变化。常见的…

CVE漏洞爬虫脚本

前言&#xff1a;前阵子公司非要把CVE漏洞信息拉倒本地&#xff0c;说方便安全员们查看&#xff0c;其实在莫慌看来&#xff0c;大可不必&#xff0c;90%的CVE漏洞其实不具备现实利用的可能性的&#xff08;不代表不能被利用&#xff09;&#xff0c;但是你说它没有意义也是不对…

分布式锁理解

介绍分布式锁&#xff0c;我觉得从项目的背景入手把 在伙伴匹配系统中&#xff0c;我创建了一个定时任务&#xff0c;做为缓存预热的手段 这个具体原因在Redis-CSDN博客 接下来切入正题&#xff1a; 想象每个服务器都有一个定时任务&#xff0c;都要对数据库或者缓存进行操…

Coze触发器:触发任务的Python接口源码

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Coze触发器 📒📝 触发器接口源码⚓️ 相关链接 ⚓️📖 介绍 📖 自动化,一个在现代软件开发中不可或缺的概念,它让我们的生活和工作变得更加高效。Coze也支持定时任务/触发任务,通过触发器,我们可以更自由的控制Bot去…

【cocos creator】2.x,伪3d拖拽,45度视角,60度视角,房屋装扮

伪3d拖拽&#xff0c;45度视角,60度视角 工程下载&#xff1a;&#xff08;待审核&#xff09; https://download.csdn.net/download/K86338236/89530812 dragItem2.t s import mapCreat2 from "./mapCreat2";const { ccclass, property } cc._decorator; /*** 拖拽…