Python中下划线有几种使用方法?

下划线 “_”在 Python 中的用法,有几种常用的上下文:

变量分配:
当循环或函数中不使用变量时,它通常被用作一次性变量名。例如

for _ in range(5):
    print("Hello")


也称为虚拟变量:用于表示一个变量,其值与代码无关,也不会在代码中使用。这在需要遍历序列但不关心单个值的循环中很常见。


数字字面分隔符(Python 3.6 及以上版本):
在 Python 3.6 及更高版本中,可以使用下划线作为数字文字的可视分隔符,以提高可读性。

million = 1_000_000

双下划线(__):

  • 名称混淆:Python 用来避免类及其属性之间的命名冲突。这是一个技术细节,在大多数情况下您不需要担心。
  • 特殊方法:用于定义类中的特殊方法,如 init (构造函数) 或 str (字符串表示法)。

1、名称混淆
当一个类的属性名以两个下划线开头时 (例如 __attribute), Python 会进行名称混淆,以增加在子类中意外覆盖该属性的难度。通过添加一个包含类名的前缀,属性名就被 "混淆 "了。

class MyClass:
    def <strong>init</strong>(self):
        self.__private_attribute = 42

obj = MyClass()
# 访问被混淆的属性
print(obj._MyClass__private_attribute)


这是双下划线最常见的技术用法。当用作类中属性名称的前缀和后缀时,它告诉 Python 解释器在继承时对名称进行混淆。这意味着实际存储的名称将被更改,添加一个类标识符,以避免与子类中定义的属性冲突。这主要是 Python 用来确保属性解析正确的内部机制,您很少需要担心具体细节。

2、特殊方法
Python 中的许多特殊方法,如 init (构造函数)、str (字符串表示) 和 getitem (索引),都使用双下划线作为其名称的一部分。这些方法在类中有特定的含义和功能,对对象的行为至关重要。

3、枚举中的类变量
在枚举 (enum) 中,双下划线用于定义类变量。Python 中的枚举可以有属性,类变量使用双下划线定义。

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
    __custom_attribute = "Custom"

"软弱 "的名字
双下划线有时用来表示方法或属性是 "私有的 "或类的内部属性,尽管 Python 并不强制执行真正的封装。

class MyClass:
    def __internal_method(self):
        pass


需要注意的是,使用双下划线进行名称混淆或作为 "私有 "属性的约定并不能使属性真正私有。如果你知道被混淆的名称或选择访问它,它仍然可以被访问。在这些情况下使用双下划线更多的是为了约定俗成和表明意图,而不是严格执行。

下面是关于使用双下划线的一些补充说明:

  • 不要过度使用:虽然双下划线在特定用途上很有用,但过度使用会降低代码的可读性。只有在必要时才使用双下划线,以保持清晰或约定俗成。
  • 了解上下文:双下划线的含义和用法会因上下文而异。有关具体细节,请始终查阅 Python 官方文档。
  • 命名约定:遵循特殊方法和私有变量的既定命名约定,以确保一致性并保持代码的可读性。