文件之间的Python名称空间和全局变量

时间:2019-02-13 15:27:20

标签: python scope namespaces

我有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.。我想 这是名称空间和范围的问题,但我不太了解它是如何工作的。有人可以帮我吗?谢谢。

1 个答案:

答案 0 :(得分:0)

您有两个glob_variable_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

具有:

# File 2
from File1 import Class1, Class2
import File1

if __name__ == '__main__':
    global glob_variable_1
    # Other stuff
    var1 = 1234
    obj = Class1(var1)

    glob_variable_1 = 666
    print(glob_variable_1)
    print(File1.glob_variable_1)

礼物:

666
42       

比在模块中使用全局变量更好的是使用函数来设置/获取类或文件。