Python的setdefault()
允许您从字典中获取值,但是如果键不存在,则可以基于参数setdefault()
为其分配值。然后,您可以获取字典中键处的所有内容。
不操纵对象的default
,对象是否具有类似的功能?
例如我有一个对象__dict__
,它可能有也可能没有属性__dict__
。我该怎么做:
foo
?
Python没有内置的,但是您可以定义自己的:
bar
请注意,如果属性尚不存在,当前接受的答案将调用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(....)
不要这样做。
请使用def setdefaultattr(obj, name, value):
try:
return getattr(obj, name)
except AttributeError:
setattr(obj, name, value)
return value
提供默认值。这就是Python的方式。
vars(obj).setdefault(name, value)
这是正常的,标准的,典型的方法。没有迫不得已的理由要这样做。