无法在类方法内部访问Dundered全局变量



我正在经历一种模糊的(对我来说(无序作用域效应,并试图为其制定规则:

#!/usr/bin/env python3
stuff = "the things"
__MORE_STUFF = "even more"
class Thing:
def __init__(self):
global __MORE_STUFF # doesn't help
print(stuff) # is OK
print(__MORE_STUFF) # fail!
Thing()

中的结果

$ python3 dunder.py
the things
Traceback (most recent call last):
File "dunder.py", line 12, in <module>
Thing()
File "dunder.py", line 10, in __init__
print(__MORE_STUFF) # fail!
NameError: name '_Thing__MORE_STUFF' is not defined

本应是模块全局变量的内容被视为类级属性,如果未定义,则被标记为未定义。

我一直在试图查看文档,但似乎无法确定规则是什么。

有人能给我指一下合适的文件吗?

文档引用的名称如class private名称:

__*

类私有名称。当在类定义的上下文中使用该类别中的名称时,会重写为使用损坏的形式有助于避免base和的"private"属性之间的名称冲突派生类。请参阅标识符(名称(一节。

由于子类化不适用于模块(至少,在语言提供任何工具或建议的范围内,不适用于如何进行子类化(,因此不需要使用类私有名称,而_前缀的名称将起作用。

#!/usr/bin/env python3
stuff = "the things"
_MORE_STUFF = "even more"
class Thing:
def __init__(self):
print(stuff) # is OK
print(_MORE_STUFF)
Thing()

相关内容

  • 没有找到相关文章

最新更新