【python基础知识】变量名和方法名的单下划线(_)和双下划线(__)总结

news2025/6/7 5:20:02

文章目录

    • 1. 单下划线前缀(_variable 或 _method())
    • 2. 双下划线前缀(__variable 或 __method())
    • 3. 前后双下划线(__variable__ 或 __method__)
    • 4. 单下划线(_)单独使用
    • 总结

在 Python 中,变量名和方法名前的单下划线(_)和双下划线(__)是一种命名约定,用于表示不同的访问级别和特殊用途。以下是详细介绍:

1. 单下划线前缀(_variable 或 _method())

含义:约定为“私有”,表示该变量或方法仅供内部使用,不建议外部直接访问。

作用

  • 提示其他开发者不要随意访问,但 Python 不会强制限制。
  • 在模块导入时,使用 from module import * 会忽略以单下划线开头的对象(除非模块中定义了 __all__)。

示例

class MyClass:
    def __init__(self):
        self._internal_var = 42  # 内部变量

    def _internal_method(self):  # 内部方法
        return "This is internal"

obj = MyClass()
print(obj._internal_var)  # 可以访问,但不推荐

2. 双下划线前缀(__variable 或 __method())

含义:名称修饰(Name Mangling),用于避免子类意外覆盖父类的属性或方法。

作用

  • Python 会自动将 __name 转换为 _ClassName__name,使其在类外部难以访问。
  • 主要用于防止继承冲突,而非严格限制访问。

示例

class Parent:
    def __init__(self):
        self.__private_var = 10  # 私有变量

    def __private_method(self):  # 私有方法
        return "Private method"

class Child(Parent):
    pass

p = Parent()
print(p._Parent__private_var)  # 可以访问,但需通过修改后的名称
print(p.__private_var)  # 报错:AttributeError

c = Child()
print(c._Parent__private_method())  # 父类的私有方法被保留

3. 前后双下划线(variablemethod

含义:特殊方法(Magic Methods)或内置属性,由 Python 解释器调用。

常见用途

  • __init__():类的构造函数
  • __str__():对象的字符串表示(str(obj)
  • __len__():对象的长度(len(obj)
  • __call__():使对象可调用(obj()

示例

class MyNumber:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):  # 重载加法运算符
        return MyNumber(self.value + other.value)

    def __str__(self):  # 定义打印时的输出
        return f"MyNumber({self.value})"

a = MyNumber(5)
b = MyNumber(10)
print(a + b)  # 输出: MyNumber(15)

4. 单下划线(_)单独使用

含义

  • 临时变量:在循环或解包中表示不需要的变量。
  • 国际化(i18n):在 gettext 等库中用于翻译函数。
  • 交互式解释器:保存上一次执行的结果。

示例

# 临时变量
for _ in range(3):
    print("Hello")

# 解包时忽略某些值
name, _, age = ("Alice", "Female", 30)

# 交互式解释器中
>>> 2 + 3
5
>>> print(_)
5

总结

命名方式含义与用途
_variable约定为私有变量,不建议外部访问。
__variable名称修饰,防止子类覆盖,实际可通过 _ClassName__variable 访问。
__variable__特殊方法或内置属性,由 Python 解释器自动调用。
_临时变量、国际化或保存交互结果。

注意

  • Python 的访问控制是基于约定而非强制,开发者应自觉遵守命名规范。
  • 避免自定义名称使用 __xx__ 格式,以防与 Python 内置功能冲突。

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

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

相关文章

FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ FART 脱壳 fartthread 方法在 app 启动的时候(ActivityThread)开启 fart 线程,休眠 60 秒,等待 app 启动完成后…

快速用 uv 模拟发布一个 Python 依赖包到 TestPyPI 上,以及常用命令

目录 1. uv 介绍2. uv 安装(Windows版)3. 快速模拟一个要发布到TestPyPI上的依赖包,scoful-test-lib3.1 初始化 uv init3.2 进入scoful-test-lib3.3 修改pyproject.toml3.4 使用命令 uv sync3.5. 使用命令 uv lock3.6 使用命令 uv build3.7 获…

Python读取PDF:文本、图片与文档属性

在日常的数据采集、文档归档与信息挖掘过程中,PDF格式因其版式固定、内容稳定而被广泛使用。Python 开发者若希望实现 PDF 内容的自动化提取,选择一个易用且功能完善的库至关重要。本文将介绍如何用Python实现 PDF文本读取、图片提取 以及 文档属性读取 …

基于SpringBoot+Vue2的租房售房二手房小程序

角色: 管理员、房东、租客/买家 技术: springbootvue2mysqlmybatispagehelper 核心功能: 租房售房小程序是一个专注于房屋租赁和销售的综合性平台,基于SpringBootVue2MySQLMyBatisPageHelper技术栈开发,为用户提供…

基于本地LLM与MCP架构构建AI智能体全指南

一、AI智能体开发的新范式 随着人工智能技术的快速演进,AI智能体(AI Agents)正成为连接技术创新与实际应用的核心载体。从智能家居的温控系统到复杂的金融风控决策,AI智能体通过感知环境并执行目标导向的行为,正在重塑…

AT2659_GNSS低噪声放大器芯片

AT2659 射频放大器在SiGe工艺平台上实现23dB增益与0.71dB噪声系数的优异组合,专为BDS/GPS/GLONASS/GALILEO多模导航系统优化设计。其宽电压适应能力(1.4-3.6V)与低至4.4mA的功耗特性,配合1.5mm1mm0.55mm的6脚DFN封装(R…

MADlib —— 基于 SQL 的数据挖掘解决方案(4)—— 数据类型之矩阵

目录 一、矩阵定义 二、MADlib 中的矩阵表示 1. 稠密 2. 稀疏 三、MADlib 中的矩阵运算函数 1. 矩阵操作函数分类 (1)表示函数 (2)计算函数 (3)提取函数 (4)归约函数&…

ServBay 1.13.0 更新,新增第三方反向代理/内网穿透

ServBay 作为一款简化本地开发环境搭建与管理的强大工具,致力于打造一个开箱即用、稳定可靠的本地开发平台,让用户专注于代码编写,提升开发效率。 ServBay 1.13.0 正式发布!本次更新聚焦于提升本地开发项目的外部可访问性、增强国…

Docker构建自定义的镜像

构建自定义的 Docker 镜像是 Docker 使用中的核心操作之一。通过自定义镜像,你可以将应用程序及其依赖环境打包成一个可移植的容器化镜像。以下是详细的步骤和注意事项: 1. 准备工作 在构建自定义镜像之前,你需要准备以下内容: D…

【SSM】SpringMVC学习笔记8:拦截器

这篇学习笔记是Spring系列笔记的第8篇,该笔记是笔者在学习黑马程序员SSM框架教程课程期间的笔记,供自己和他人参考。 Spring学习笔记目录 笔记1:【SSM】Spring基础: IoC配置学习笔记-CSDN博客 对应黑马课程P1~P20的内容。 笔记2…

井川里予瓜pdf完整版

井川里予瓜pdf完整版 下载链接: 链接:https://pan.quark.cn/s/c75455d6be60 在网红文化盛行的当下,井川里予无疑是一位备受瞩目的人物。这位2001年出生于广东湛江的姑娘,凭借独特风格在网络世界掀起波澜,其发展轨迹…

基于 Zynq 平台的 EtherCAT 主站的软硬件协同设计

摘要: 针对工业自动化对控制能力和强实时性的需求,提出了一种基于 FPGA 的改进型 EtherCAT 硬件主站方案 。 该方案利用 Zynq-7000 平台,在 PL 端实现 FPGA 协议栈,以保证核心功能的高效执 行 。 基于 AXI4 总线设计…

聊一聊 .NET在Linux下的IO多路复用select和epoll

一:背景 1. 讲故事 在windows平台上,相信很多人都知道.NET异步机制是借助了Windows自带的 IO完成端口 实现的异步交互,那在 Linux 下.NET 又是怎么玩的呢?主要还是传统的 select,poll,epoll 的IO多路复用…

从零开始的嵌入式学习day33

网络编程及相关概念 UDP网络通信程序 UDP网络通信操作 一、网络编程及相关概念 1. 网络编程概念: 指通过计算机网络实现程序间通信的技术,涉及协议、套接字、数据传输等核心概念。常见的应用场景包括客户端-服务器模型、分布式系统、实时通信等。…

黑马Java面试笔记之框架篇(Spring、SpringMvc、Springboot)

一. 单例bean Spring框架中的单例bean是线程安全的吗? Spring框架中的bean是单例的,可以在注解Scope()进行设置 singleton:bean在每一个Spring IOC容器中只有一个实例。prototype:一个bean的定义可以有多个实例 总结 二. AOP AOP称…

全球IP归属地查询接口如何用C#进行调用?

一、什么是全球IP归属地查询接口 在全球化互联网时代,IP地址作为网络世界的地理位置标识,扮演着至关重要的角色。全球IP归属地查询接口通过解析IP地址,提供包括国家、省、市、区县和运营商在内的详细信息。 二、应用场景 1. 访问识别 全球…

NumPy 比较、掩码与布尔逻辑

文章目录 比较、掩码与布尔逻辑示例:统计下雨天数作为通用函数(Ufuncs)的比较运算符使用布尔数组计数条目布尔运算符 布尔数组作为掩码使用关键字 and/or 与运算符 &/| 的区别 比较、掩码与布尔逻辑 本文介绍如何使用布尔掩码来检查和操…

力扣HOT100之二分查找:35. 搜索插入位置

这道题属于是二分查找的入门题了,我依稀记得一些二分查找的编码要点,但是最后还是写出了一个死循环,无语(ˉ▽ˉ;)…又回去看了下自己当时的博客和卡哥的视频,这才发现自己分情况只分了两种,最后导致死循环…

使用API有效率地管理Dynadot域名,查看域名市场中所售域名的详细信息

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

IM即时通讯软件,构建企业局域网内安全协作

安全与权限:协同办公的企业级保障 在协同办公场景中,BeeWorks 将安全机制贯穿全流程。文件在局域网内传输与存储时均采用加密处理,企业网盘支持水印预览、离线文档权限回收等功能,防止敏感资料外泄;多人在线编辑文档时…