参考:
python中_、__、xx(单下划线、双下划线等)的含义
Python中的下划线、双下划线
单下划线和双下划线在Python变量名和方法名中都有各自的含义。有些仅仅是作为约定,用于提示开发人员;而另一些则对Python解释器有特殊含义。
总的来说有一下几种情况:
- 前置单下划线:
_var
- 后置单下划线:
var_
- 前置双下划线:
__var
- 前后双下划线:
__var__
- 单下划线:
_
1. 前置单下划线:_var
"单下划线 " 开始的成员变量相当于私有变量,也叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,需通过类提供的接口进行访问(可以定义有点像java中的getter、setter方法,借助方法访问,而不是直接对变量动刀子);不能用’from module import *'导入。其实,Python并没有真正的私有化支持,用下划线得到的是伪私有,也就是说如果你强行要用也是可以的,但不符合python的规范。我们应该尽量避免重新定义以下划线开头的变量。
2. 后置单下划线:var_
有时,某个变量最合适的名称已被Python语言中的关键字占用。因此,诸如class或def的名称不能用作Python中的变量名。在这种情况下,可以追加一个下划线来绕过命名冲突。
总之,用一个后置单下划线来避免与Python关键字的命名冲突是一个约定。
3. 前置双下划线:__var
双下划线前缀会让Python解释器重写属性名称,以避免子类中的命名冲突。
这也称为名称改写(name mangling),即解释器会更改变量的名称,以便在稍后扩展这个类时避免命名冲突。
4. 前后双下划线:__var__
系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 __init__()
代表类的构造函数。类似__xxx__
这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如一个模块的__author__
,__name__
就是特殊变量,模块定义的文档注释(就是模块开头的字符串)也可以用特殊变量__doc__
访问,我们自己的变量一般不要用这种变量名,以避免与将来Python语言的变化产生冲突。
5. 单下划线:_
按照习惯,有时候单个独立下划线是用作一个名字,来表示某个变量是临时的或无关紧要的。通常被称为丢弃变量