Python中简洁的getattr()及其非None使用方法
我发现自己经常在做以下事情:
attr = getattr(obj, 'attr', None)
if attr is not None:
attr()
# Do something, either attr(), or func(attr), or whatever
else:
# Do something else
有没有更符合Python风格的写法呢?这样写会更好吗?(我觉得在性能上至少没有提升。)
try:
obj.attr() # or whatever
except AttributeError:
# Do something else
7 个回答
14
还有一个不错的说法:
if hasattr(obj, 'attr'):
...something...
else:
...something else...
在你提供的两个选项中,我更喜欢第一个。因为在访问成员时抛出异常,这种做法感觉并不是异常设计的初衷。
32
和乔的回答类似,不过更简短:
getattr(obj, 'attr', lambda: None)()
56
因为你在调用 attr
这个函数,所以你可以直接这样做:
def default_action():
# do something else
action = getattr(obj, 'attr', default_action)
action()