【发布时间】:2019-07-07 11:54:16
【问题描述】:
我有 2 个不同的文件。第一个,定义了很多类:
# File 1:
class Class1:
class Class2:
#...
这些类使用一些定义为全局的变量。
# File 1:
class Class1:
def __init__(self, var1):
global glob_variable_1
# Other stuff
class Class2:
#...
在文件 2 中,我从第一个文件中导入所有类,然后使用它们。在这个文件的这个主要部分,我定义了全局变量。
# File 2
from File1 import Class1, Class2
if __name__ == '__main__':
global glob_variable_1
glob_variable_1 = 10
# Other stuff
Class1(var1)
我收到错误 NameError: name 'glob_variable_1' is not defined.。我想
这是命名空间和范围的问题,但我不太明白它是如何工作的。有人可以帮帮我吗?谢谢。
【问题讨论】:
-
您何时以及如何尝试访问
glob_variable_1?我从你的代码中得到NameError: name 'var1' is not defined。 -
这可能是一个相关的线程:stackoverflow.com/questions/15959534/…
-
@cdarke 我的代码是 2K+ 行,我只是大致了解了它的结构:2 个文件,其中一个我定义了类,第二个文件对这些类很重要。在第一个文件中,在类中,变量 glob_variable_1 被调用(因此在
__init__方法开头的全局 glob_variable_1 )。但是,这些全局变量在第二个文件中初始化。 -
@Idlehands 我去看看,谢谢。
-
在模块之间共享变量是一个有缺陷的设计,有更好的方法。请改用封装函数。
标签: python scope namespaces