首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在当前模块上调用setattr()?

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

Stack Overflow用户
提问于 2010-05-29 10:07:23
回答 2查看 60.9K关注 0票数 155

为了在当前模块上设置变量,我应该将什么作为第一个参数"object“传递给函数setattr(object, name, value)

例如:

代码语言:javascript
复制
setattr(object, "SOME_CONSTANT", 42);

产生与以下相同的效果:

代码语言:javascript
复制
SOME_CONSTANT = 42

在包含这些行的模块中(使用正确的object)。

我在模块级别动态生成几个值,由于我不能在模块级别定义__getattr__,因此这是我的后备方案。

EN

回答 2

Stack Overflow用户

发布于 2018-03-18 09:17:12

在Python3.7中,您将能够在模块级(related answer)使用__getattr__

每个PEP 562

代码语言:javascript
复制
def __getattr__(name):
    if name == "SOME_CONSTANT":
        return 42
    raise AttributeError(f"module {__name__} has no attribute {name}")
票数 13
EN

Stack Overflow用户

发布于 2010-05-29 11:11:30

如果必须从模块内部设置模块作用域变量,那么global有什么问题

代码语言:javascript
复制
# my_module.py

def define_module_scoped_variables():
    global a, b, c
    a, b, c = 'a', ['b'], 3

因此:

代码语言:javascript
复制
>>> import my_module
>>> my_module.define_module_scoped_variables()
>>> a
NameError: name 'a' is not defined
>>> my_module.a
'a'
>>> my_module.b
['b']
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2933470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档