在Python中,单下划线(_)和双下划线(__)有着不同的约定意义。
单下划线:
用于指示变量或函数是用于内部使用的,但这并不是强制性的。例如,在类中,以单下划线开头的属性或方法表明它们是意图在类内部使用的。在模块中,以单下划线开头的函数表示它们不应该被从其他地方导入。根据PEP-8风格指南,_single_leading_underscore表示弱“内部使用”指示符。双下划线(名称改编):
在Python文档中,任何形式为__spam的标识符(至少两个前导下划线,最多一个后缀下划线)在文本上会被替换为_classname__spam,其中classname是当前类名,前导下划线被去除。这种改编是不考虑标识符的语法位置的,因此它可以用来定义类私有的实例变量和类变量、方法、存储在全局变量中的变量,甚至存储在实例中的变量。这种名称改编的目的主要是为了避免意外;它仍然允许有决心的人访问或修改被认为是私有的变量。例如:
class MyClass(): def __init__(self): self.__superprivate = "Hello" self._semiprivate = ", world!"mc = MyClass()# 下面的代码会引发错误,因为属性名被改编了# print(mc.__superprivate)# 正确的访问方式是print(mc._MyClass__superprivate) # 输出: Helloprint(mc._semiprivate) # 输出: , world!双下划线用于内置方法,如__init__、__bool__等。这些是Python的特殊方法,通常不用于普通属性或方法的命名。
