Python中下划线的5种含义

 

 

1. 单前导下划线 _var

下划线前缀的含义是告知其他程序员:以单个下划线开头的变量或方法仅供内部使用。 该约定在PEP 8中有定义。

这不是Python强制规定的。

class Test:
   def __init__(self):
       self.foo = 11
       self._bar = 23

>>> t = Test()
>>> t.foo
11
>>> t._bar#其性质和功能与常规变量一样,只是一种约定
23

2. 单末尾下划线 var_

有时候,一个变量的最合适的名称已经被一个关键字所占用。 因此,像class或def这样的名称不能用作Python中的变量名称。 在这种情况下,你可以附加一个下划线来解决命名冲突:

>>> def make_object(name, class):
SyntaxError: "invalid syntax"

>>> def make_object(name, class_):
...    pass

总之,单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突。 PEP 8解释了这个约定。

3. 双前导下划线 __var

定义私有属性,双下划线前缀命名的属性只能在本类中使用,不能被继承也无法被实例对象调用

class ExtendedTest(Test):
   def __init__(self):
       super().__init__()
       self.foo = 'overridden'
       self._bar = 'overridden'
       self.__baz = 'overridden'

>>> t2 = ExtendedTest()
>>> t2.foo
'overridden'
>>> t2._bar
'overridden'
>>> t2.__baz
AttributeError: "'ExtendedTest' object has no attribute '__baz'"

4. 双前导和双末尾下划线 _var_

Python保留了有双前导和双末尾下划线的名称,用于特殊用途。 这样的例子有,__init__对象构造函数,或__call__ --- 它使得一个对象可以被调用。

class PrefixPostfixTest:
   def __init__(self):
       self.__bam__ = 42

>>> PrefixPostfixTest().__bam__
42

5.单下划线 _

按照习惯,有时候单个独立下划线是用作一个名字,来表示某个变量是临时的或无关紧要的。

>>> for _ in range(32):
...    print('Hello, World.')

posted @ 2021-04-12 09:33  鲍曼小学生  阅读(366)  评论(0编辑  收藏  举报