导入时,Python全局变量在类内部不同

时间:2012-12-18 05:49:37

标签: python class scope global-variables

这显然是某种范围或进口问题,但我无法弄清楚。类似的东西:

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

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:3)

Python中的“global”是一个可在模块中的顶层访问的变量。

此消息:

NameError: global name 'the_global' is not defined
classes.py内提出

表示您的the_global文件中没有全局名为classes.py的内容。

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

答案 1 :(得分:0)

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

如果您必须处理全局定义,那么这里是正确的解决方案:移动“全局” 将变量放入专用模块并使用适当的import语句导入变量 进入你的“课堂”模块。

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