我试图弄清楚在确定是否可以执行操作 do_stuff()
的对象obj
的不同方法之间的权衡。据我所知,有三种确定可行性的方法:
# Way 1
if isinstance(obj, Foo):
obj.do_stuff()
# Way 2
if hasattr(obj, 'do_stuff'):
obj.do_stuff()
# Way 3
try:
obj.do_stuff()
except:
print 'Do something else'
哪种方法更受青睐(为什么)?
except
,只需让异常沿着调用堆栈向上传递)是最好的方法,但是每个规则都有例外(hohoho)。例如,字符串和列表共享许多方法,但在递归调用中,您经常希望对它们执行不同的操作。 - roippi