如何在当前模块上调用setAttr()?
-
05-10-2019 - |
题
我将作为第一个参数传递什么”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在线文档对此特定的区别可能会有些混乱)。
其他提示
如果您必须从模块内设置模块示范变量,则有什么问题 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
- 你不会。您将在模块以外的其他地方存储动态生成的内容。
不隶属于 StackOverflow