0

这显然是某种范围或导入问题,但我无法弄清楚。就像是:

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

任何帮助都会很棒!

4

2 回答 2

3

Python 中的“全局”是模块内顶层可访问的变量。

这条信息:

NameError: global name 'the_global' is not defined

在范围内提出意味着您的文件classes.py中没有全局命名。the_globalclasses.py

Python 模块不共享全局变量。(嗯,不是你希望他们分享的方式)

于 2012-12-18T05:53:12.407 回答
0

“全局”变量仅在使用它的模块范围内将变量定义为全局变量。您不能在此处使用“全局”来访问“类”模块的模块范围之外的变量。

如果您必须处理全局定义,这里的正确解决方案是:将“全局”变量移动到专用模块中,并使用正确的导入语句将变量导入到“类”模块中。

myvars.py:

MY_GLOBAL_VAR = 42

类.py:

import myvars

class Thing():

   def method(self):
       return myvars.MY_GLOBAL_VAR # if you need such a weird pattern for whatever reason
于 2012-12-18T05:52:41.320 回答