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

【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.xdnf.cn/news/12687.html

相关文章:

  • Unity基础-数学向量
  • 无刷电机的驱动MOSFET
  • Windows安装 cityflow
  • 超声波清洗设备的清洗效果如何?
  • Python 3.11.9 安装教程
  • 视频监控平台建设方案
  • 数据结构之LinkedList
  • RetroMAE 预训练任务
  • 字符串加密(华为OD)
  • Mathematica 打印输出时,隐藏 In[n] 和 Out[n] 标签
  • 【51单片机】1. 基础点灯大师
  • Splash动态渲染技术全解析:从基础到企业级应用(2025最新版)
  • echarts树状图与vue3
  • Kubernetes 从入门到精通-label标签
  • 山东大学算法设计与分析复习笔记
  • 多模态+空间智能:考拉悠然以AI+智慧灯杆,点亮城市治理新方式
  • C#实现Stdio通信方式的MCP Server
  • 高级网络工具包用户操作指南
  • Linux 中替换文件中的某个字符串
  • 如何调控gpu训练参数
  • 优选算法第十二讲:队列 + 宽搜 优先级队列
  • 深度学习在RNA分子动力学中的特征提取与应用指南
  • 每日互动方毅:数据要素价值在于流转,用好AI的前提是用好数据 | 爱分析访谈
  • [蓝桥杯]版本分支
  • AI 模型分类全解:特性与选择指南
  • 鸿蒙开发:loading动画的几种实现方式
  • 欧拉定理和费马定理
  • 人工智能会导致人类毁灭吗
  • 所有的Linux桌面环境
  • 从微积分到集合论(1630-1910)(历史简介)——第4章——现代积分理论的起源(Thomas Hawkins)