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