是否存在用于获取对象属性的setdefault()等效项?

问题描述 投票:14回答:4

Python的setdefault()允许您从字典中获取值,但是如果键不存在,则可以基于参数setdefault()为其分配值。然后,您可以获取字典中键处的所有内容。

不操纵对象的default,对象是否具有类似的功能?

例如我有一个对象__dict__,它可能有也可能没有属性__dict__。我该怎么做:

foo

python attributes
4个回答
7
投票

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

bar

23
投票

请注意,如果属性尚不存在,当前接受的答案将调用hasattr(),setattr()和getattr()。仅当OP进行了诸如覆盖setattr和/或getattr之类的操作时,这才是必要的-在这种情况下,OP不是我们所邀请的无辜询问者。否则,调用全部3个函数很麻烦; setattr()调用后应接result = setdefaultattr(foo,'bar','bah') ,这样它才不会落入def setdefaultattr(obj, name, value): if not hasattr(obj, name): setattr(obj, name, value) return getattr(obj, name)

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

return getattr(....)

2
投票

-2
投票

不要这样做。

请使用def setdefaultattr(obj, name, value): try: return getattr(obj, name) except AttributeError: setattr(obj, name, value) return value 提供默认值。这就是Python的方式。

vars(obj).setdefault(name, value)

这是正常的,标准的,典型的方法。没有迫不得已的理由要这样做。

© www.soinside.com 2019 - 2024. All rights reserved.