首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中,是否有一个setdefault()等效于获取对象属性?

在python中,是否有一个setdefault()等效于获取对象属性?
EN

Stack Overflow用户
提问于 2018-09-11 08:30:57
回答 2查看 0关注 0票数 0

Python的setdefault允许您从字典中获取值,但如果该键不存在,则您可以分配基于参数的值default。然后,您可以获取字典中键的任何内容。

没有操纵对象__dict__是否有类似的对象功能?

例如, 我有一个foo可能有也可能没有属性的对象bar。我怎么能这样做:

代码语言:javascript
复制
result = setdefaultattr(foo,'bar','bah')
EN

回答 2

Stack Overflow用户

发布于 2018-09-11 17:17:47

Python没有内置的,但您可以定义自己的:

代码语言:javascript
复制
def setdefaultattr(obj, name, value):
    if not hasattr(obj, name):
        setattr(obj, name, value)
    return getattr(obj, name)
票数 0
EN

Stack Overflow用户

发布于 2018-09-11 18:02:23

请注意,如果该属性不存在,则当前接受的答案将调用hasattr(),setattr()和getattr()。只有当OP做了类似覆盖setattr和/或getattr的事情时才有必要 - 在这种情况下OP不是我们带他去的无辜的询问者。否则调用所有3个函数是粗略的; 应该跟随setattr()调用,return value以便它不会落到return getattr(....)

根据文档,hasattr()是通过调用getattr()和捕获异常来实现的。当属性已经存在时,以下代码可能会更快:

代码语言:javascript
复制
def setdefaultattr(obj, name, value):
    try:
        return getattr(obj, name)
    except AttributeError:
        setattr(obj, name, value)
    return value
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008857

复制
相关文章

相似问题

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