当前位置: 首页 > article >正文

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

文章目录

    • 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):passp = Parent()
print(p._Parent__private_var)  # 可以访问,但需通过修改后的名称
print(p.__private_var)  # 报错:AttributeErrorc = 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 = valuedef __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.lryc.cn/news/2402505.html

相关文章:

  • FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
  • ✅ 常用 Java HTTP 客户端汇总及使用示例
  • 快速用 uv 模拟发布一个 Python 依赖包到 TestPyPI 上,以及常用命令
  • Keil调试模式下,排查程序崩溃简述
  • Python读取PDF:文本、图片与文档属性
  • 基于SpringBoot+Vue2的租房售房二手房小程序
  • 数学:学好数学需要对数系进行系统的对比和分析
  • 基于本地LLM与MCP架构构建AI智能体全指南
  • AT2659_GNSS低噪声放大器芯片
  • 跨平台游戏引擎 Axmol-2.6.1 发布
  • MADlib —— 基于 SQL 的数据挖掘解决方案(4)—— 数据类型之矩阵
  • ServBay 1.13.0 更新,新增第三方反向代理/内网穿透
  • C#对象扩展方法:提升对象操作的灵活性与效率
  • Python爬虫爬取天猫商品数据,详细教程【Python经典实战项目】
  • Oracle 的 SEC_CASE_SENSITIVE_LOGON 参数
  • Docker构建自定义的镜像
  • 【SSM】SpringMVC学习笔记8:拦截器
  • 井川里予瓜pdf完整版
  • UI自动化常见的一些问题解决方式
  • 基于 Zynq 平台的 EtherCAT 主站的软硬件协同设计
  • 聊一聊 .NET在Linux下的IO多路复用select和epoll
  • 从零开始的嵌入式学习day33
  • ArcGIS Pro 3.4 二次开发 - 宗地
  • 前端面试准备-7
  • 黑马Java面试笔记之框架篇(Spring、SpringMvc、Springboot)
  • 全球IP归属地查询接口如何用C#进行调用?
  • NumPy 比较、掩码与布尔逻辑
  • 力扣HOT100之二分查找:35. 搜索插入位置
  • 使用API有效率地管理Dynadot域名,查看域名市场中所售域名的详细信息
  • IM即时通讯软件,构建企业局域网内安全协作