【问题标题】:Python namespace and global variable between files文件之间的 Python 命名空间和全局变量
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 2017-01-04
    • 2021-04-19
    • 2011-03-25
    • 2011-08-31
    • 2015-04-22
    • 2012-12-28
    • 1970-01-01
    相关资源
    最近更新 更多