如何在当前模块上调用setattr()?
我作为第一个参数“ object
”传递给函数setattr(object, name, value)
来设置当前模块上的variables?
例如:
setattr(object, "SOME_CONSTANT", 42);
效果如下:
SOME_CONSTANT = 42
在包含这些行的模块中(使用正确的object
)。
我在模块级dynamic地生成了几个值,因为我不能在模块级定义__getattr__
,这是我的后备。
import sys thismodule = sys.modules[__name__] setattr(thismodule, name, value)
或者,不使用setattr
(这打破了问题的信件,但满足相同的实际目的;-):
globals()[name] = value
注意 :在模块范围内,后者相当于:
vars()[name] = value
它更简洁一些,但不能在函数内工作( vars()
给出了调用范围的variables:在全局范围调用模块的variables,然后使用R / W,但函数调用函数的variables,然后它必须被视为R / O – Python在线文档可能有点混淆关于这种具体区别)。
如果您必须在模块中设置模块范围的variables, global
什么问题?
# my_module.py def define_module_scoped_variables(): global a, b, c a, b, c = 'a', ['b'], 3
从而:
>>> import my_module >>> my_module.define_module_scoped_variables() >>> a NameError: name 'a' is not defined >>> my_module.a 'a' >>> my_module.b ['b']
- 你不会的。 你会做
globals()["SOME_CONSTANT"] = 42
- 你不会的。 您可以将dynamic生成的内容存储在模块以外的其他位置。