python isinstance против hasattr против try / кроме: что лучше?

Я пытаюсь выяснить компромиссы между различными подходами определения, с объектом или нет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'

Какой метод является предпочтительным (и почему)?

Ответы на вопрос(3)

Ваш ответ на вопрос