如何在当前模块上调用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'] 
  1. 你不会的。 你会做globals()["SOME_CONSTANT"] = 42
  2. 你不会的。 您可以将dynamic生成的内容存储在模块以外的其他位置。