Python的setdefault允许您从字典中获取值,但如果该键不存在,则您可以分配基于参数的值default
。然后,您可以获取字典中键的任何内容。
没有操纵对象__dict__
是否有类似的对象功能?
例如,
我有一个foo
可能有也可能没有属性的对象bar
。我怎么能这样做:
result = setdefaultattr(foo,'bar','bah')
发布于 2018-09-11 17:17:47
Python没有内置的,但您可以定义自己的:
def setdefaultattr(obj, name, value):
if not hasattr(obj, name):
setattr(obj, name, value)
return getattr(obj, name)
发布于 2018-09-11 18:02:23
请注意,如果该属性不存在,则当前接受的答案将调用hasattr(),setattr()和getattr()。只有当OP做了类似覆盖setattr和/或getattr的事情时才有必要 - 在这种情况下OP不是我们带他去的无辜的询问者。否则调用所有3个函数是粗略的; 应该跟随setattr()调用,return value
以便它不会落到return getattr(....)
根据文档,hasattr()是通过调用getattr()和捕获异常来实现的。当属性已经存在时,以下代码可能会更快:
def setdefaultattr(obj, name, value):
try:
return getattr(obj, name)
except AttributeError:
setattr(obj, name, value)
return value
https://stackoverflow.com/questions/-100008857
复制相似问题