Я пытаюсь выяснить компромиссы между различными подходами, чтобы определить, можно ли с объектом obj выполнить действие do_stuff(). Насколько я понимаю, существует три способа определить, возможно ли это:
# 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'
Какой предпочтительный метод (и почему)?
