变量或方法仅供内部使用,但仅作为一种提示,通常不由解释器强制执行
仍可访问
class Test:
def __init__(self):
self.foo = 11
self._bar = 23
t=Test()
print(t.foo)
print(t._bar)
输出结果:
11
23
# 名为myModule的模块
def external_func():
return 23
def _internal_func():
return 42
不可访问,不会导入带有前导下划线的名称,除非模块定义了覆盖此行为的__all__列表
from myModule import *
print(external_func())
print(_internal_func())
仍可访问
import myModule
print(myModule.external_func())
print(myModule._internal_func())
输出结果:
23
42
避免与关键字命名冲突
def new(a,class):
pass
def new(a,class_):
pass
触发名称修饰,解释器强制执行
解释器会重写属性名称,以便类扩展时不容易产生冲突
dunder(double underscore)
不会应用名称修饰,命名时最好避免,python保留了双前导和双末尾的名称用于特殊用途,比如__init__
对象构造函数,__call__
调用对象