Python名称空间和文件之间的全局变量
我有两个不同的文件。第一个定义了很多类:Python名称空间和文件之间的全局变量,python,scope,namespaces,Python,Scope,Namespaces,我有两个不同的文件。第一个定义了很多类: # File 1: class Class1: class Class2: #... 这些类使用一些定义为全局的变量 # File 1: class Class1: def __init__(self, var1): global glob_variable_1 # Other stuff class Class2: #... 在文件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\u variable\u 1”未定义。
。我想
这是一个名称空间和范围的问题,但我并不真正理解它是如何工作的。有人能帮我一下吗?谢谢。您有两个
glob\u variable\u 1
名称,每个名称空间中一个,您必须决定使用哪一个:
# File 1:
# defined here, outside the class
glob_variable_1 = None
class Class1:
def __init__(self, var1):
global glob_variable_1
glob_variable_1 = 42
# Other stuff
class Class2:
pass
与:
给出:
666
42
比跨模块使用全局变量好得多的是使用函数设置/获取类或文件。何时以及如何尝试访问
glob\u variable\u 1
?我从你的代码中得到NameError:name'var1'没有定义。这可能是一个相关的线程:@cdark我的代码是2K+行,我刚刚给出了它的结构:两个文件,一个是我定义的类,另一个是对这些类很重要的文件。在类的第一个文件中,调用变量glob_variable_1(因此在\uuu init\uu
方法的开头调用全局glob_变量_1)。但是,这些全局变量在第二个文件中被初始化。@Idlehands我来看看,谢谢。在模块之间共享变量是一种有缺陷的设计,有更好的方法。改用封装函数。
666
42