如何在模块中编辑全局变量?

时间:2016-05-30 23:36:49

标签: python python-3.x global-variables

我正在编写一个Python模块,我有一个在模块中定义新变量的函数。我想设置一个可以在导入文件的文件中访问的变量。如果这令人困惑,这是我的代码:

# main.py

import other_module

other_module.set_variable("var1")

print(other_module.var1) # This is not a NameError

print(var1) # NameError

但是,如果我做了一些略微不同的事情:

# main.py

from other_module import *

set_variable("var1")

print(var1) # NameError

print(other_module.var1) # NameError

other_module.py

#     other_module.py

def set_variable(name):
    exec("""
global %s
%s = 5
         """ % (name, name))

我无法控制main.py。这是消费者的代码。我希望能够访问和更改main.py的全局变量。我想要这个工作:

# main.py

from other_module import *

set_variable("var")

print(var) # This should print 5

1 个答案:

答案 0 :(得分:1)

你在做什么听起来像是班级方法行为给我。 一个类比全局命名空间更安全,尝试一个类?

这有效:

# other.py
class Other(object):

    @classmethod
    def set_variable(cls, name):
        exec('Other.%s = 5' % name)

# main.py
from other import Other

Other.set_variable('x')
print Other.x

# output
% ./main.py
5