我想了解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:*当在类定义中文本出现的标识符*和*这种转换独立于使用标识符的语法上下文*这包括任何在类体中任何地方都是标识符的标识符,包括方法定义。无论它是属性,全局还是本地都无所谓。 –