含下划线_变量名的涵义
_XXX
一般来讲,变量名_xxx被看作是“私有的”,在模块或类外不可以使用。
保护变量,意思是只有类对象和自类对象自己能访问到这些变量。
例:以单下划线开头(_foo)变量需通过类提供的接口进行访问,不能用“from xxx import *”而导入。
class Test:
def __init__(self):
self._foo = 23
t = Test()
# 依然可以进入类并访问该变量
t._foo
output: 23
# my_module.py:
def external_func():
return 23
def _internal_func():
return 42
# main.py
# 通配符导入
from my_module import *
external_func()
_internal_func()
output:
23
NameError: "name '_internal_func' is not defined"
常规导入
>>> import my_module
>>> my_module.external_func()
23
>>> my_module._internal_func()
42
XXX_
当一个变量的最合适的名称已经被一个关键字所占用。因此,像class或def这样的名称不能用作Python中的变量名称。在这种情况下,可附加一个下划线来解决命名冲突:
>>> def make_object(name, class):
SyntaxError: "invalid syntax"
>>> def make_object(name, class_):
... pass
双前导和双末尾下划线 XXX
由双下划线前缀和后缀包围的变量不会被Python解释器修改