为了在当前模块上设置变量,我应该将什么作为第一个参数"object
“传递给函数setattr(object, name, value)
?
例如:
setattr(object, "SOME_CONSTANT", 42);
产生与以下相同的效果:
SOME_CONSTANT = 42
在包含这些行的模块中(使用正确的object
)。
我在模块级别动态生成几个值,由于我不能在模块级别定义__getattr__
,因此这是我的后备方案。
发布于 2018-03-18 09:17:12
在Python3.7中,您将能够在模块级(related answer)使用__getattr__
。
每个PEP 562
def __getattr__(name):
if name == "SOME_CONSTANT":
return 42
raise AttributeError(f"module {__name__} has no attribute {name}")
发布于 2010-05-29 11:11:30
如果必须从模块内部设置模块作用域变量,那么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']
https://stackoverflow.com/questions/2933470
复制相似问题