【发布时间】:2014-02-09 18:56:20
【问题描述】:
我正在尝试了解 python 范围规则。为此,我尝试从同一模块中的类访问“非常私有”的变量
bar = "bar"
_bar = "underscore"
__bar = "double underscore"
def foo():
print bar
print _bar
print globals()["__bar"]
print __bar
class Foo:
def __init__(self):
print bar
print _bar
print globals()["__bar"]
print __bar #NameError: global name '_Foo__bar' is not defined
foo()
Foo()
NameError 失败。我在规范中找不到任何相关内容。那么,为什么它会失败以及这种行为在哪里描述?
【问题讨论】:
-
你能发布完整的输出吗?还是完整的异常消息?
-
是的,已删除,因为 - 我惊讶地发现 - 即使使用独立名称
__bar也会发生这种情况。您从文档中发布的报价并没有真正明确地说明这一点。 -
@DanielRoseman:当一个标识符以文本形式出现在类定义中时和这种转换独立于使用标识符的语法上下文。 这包括类主体中任何位置的标识符,包括方法定义。它是属性、全局还是本地都没有关系。
标签: python oop python-2.7 private