我正在编写一个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
你正在做的事情对我来说听起来像是类方法的行为。类比全局命名空间更安全,尝试类?
这有效:
# 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