这显然是某种范围或导入问题,但我无法弄清楚。 像这样:
classes.py
class Thing(object):
@property
def global_test(self):
return the_global
然后。。。
test.py
from classes import Thing
global the_global
the_global = 'foobar'
t = Thing()
t.global_test
:(
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "classes.py", line 4, in global_test
return the_global
NameError: global name 'the_global' is not defined
任何帮助都会很棒!
Python中的"global"是模块中顶层可访问的变量。
此消息:
NameError: global name 'the_global' is not defined
在 classes.py
中引发意味着您的 classes.py
文件中没有全局命名的the_global
。
Python 模块不共享全局变量。(好吧,不是以您希望他们分享的方式)
"全局"变量仅在模块范围内将变量定义为全局变量使用的地方。您不能在此处使用"global"来访问模块外部的变量"类"模块的范围。
如果你必须处理全局定义,这里的正确解决方案是:移动"全局"变量到专用模块中,并使用正确的导入语句导入变量进入您的"类"模块。
myvars.py:
MY_GLOBAL_VAR = 42
classes.py:
import myvars
class Thing():
def method(self):
return myvars.MY_GLOBAL_VAR # if you need such a weird pattern for whatever reason