如何在当前模块上调用setattr()?
问题内容:
如何将第一个参数“ object
”传递给函数setattr(object, name, value)
,以在当前模块上设置变量?
例如:
setattr(object, "SOME_CONSTANT", 42);
具有与以下相同的效果:
SOME_CONSTANT = 42
在包含这些行的模块中(带有正确的object
)。
我在模块级别动态生成几个值,由于无法__getattr__
在模块级别定义,所以这是我的后备。
问题答案:
import sys
thismodule = sys.modules[__name__]
setattr(thismodule, name, value)
或者,不使用setattr
(打破问题的字母,但满足相同的实际目的;-):
globals()[name] = value
注意 :在模块范围内,后者等效于:
vars()[name] = value
这更加简洁,但是在函数内部不起作用(vars()
给出在其范围内调用的变量:在全局范围内调用时模块的变量,然后可以使用R /
W,但在函数中可以使用变量在函数中调用时,然后必须将其视为R / O - Python在线文档对此特定区别可能会造成混淆。