在Python中,有类似setdefault()的方法获取对象属性吗?
Python中的setdefault方法可以让你从字典中获取一个值。如果你想要的键不存在,它会根据你提供的default
参数来给这个键赋一个默认值。然后你就可以获取字典中这个键对应的值。
那么,除了操作对象的__dict__
,有没有类似的功能可以用在对象上呢?
比如说,
我有一个对象foo
,它可能有属性bar
,也可能没有。那我该怎么做才能实现类似的功能呢:
result = setdefaultattr(foo,'bar','bah')
4 个回答
3
vars(obj).setdefault(name, value)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
29
注意,目前被接受的答案中,如果属性还不存在,就会调用 hasattr()
、setattr()
和 getattr()
这三个函数。只有在提问者做了一些特殊操作,比如重写了 setattr
或 getattr
的情况下,这样做才是必要的——在这种情况下,提问者就不是我们想象中的那种无辜的询问者了。否则,调用这三个函数就显得很繁琐;在调用 setattr()
后应该直接返回结果,这样就不会再执行到 return getattr(....)
了。
根据文档,hasattr
是通过调用 getattr()
并捕获异常来实现的。当属性已经存在时,下面的代码可能会更快:
def setdefaultattr(obj, name, value):
try:
return getattr(obj, name)
except AttributeError:
setattr(obj, name, value)
return value
8
Python没有内置的这个功能,但你可以自己定义一个:
def setdefaultattr(obj, name, value):
if not hasattr(obj, name):
setattr(obj, name, value)
return getattr(obj, name)