在 Python 3 中,为类变量添加前缀使其成为私有的(通过修改类中的名称)。如何访问类中的模块变量?
例如,以下两种方法不起作用:
__a = 3
class B:
def __init__(self):
self.a = __a
b = B()
结果是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
NameError: name '_B__a' is not defined
Using global
也没有帮助:
__a = 3
class B:
def __init__(self):
global __a
self.a = __a
b = B()
结果是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __init__
NameError: name '_B__a' is not defined
Running locals()
表明变量__a
完好无损地存在:
>>> locals()
{'__package__': None, '__name__': '__main__',
'__loader__': <class '_frozen_importlib.BuiltinImporter'>,
'__doc__': None, '__a': 3, 'B': <class '__main__.B'>,
'__builtins__': <module 'builtins' (built-in)>, '__spec__': None}
[添加换行符以提高可读性]
在模块中运行相同的代码(而不是解释器)会产生完全相同的行为。使用 Anaconda 的Python 3.5.1 :: Continuum Analytics, Inc.
.