如何在当前模块上调用setattr()?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

我作为第一个参数“ 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']

扫码关注云+社区