eafp.py 938 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # Duck Typing and Easier to ask forgiveness than permission (EAFP)
  2. class Duck:
  3. def quack(self):
  4. print('Quack, quack')
  5. def fly(self):
  6. print('Flap, Flap!')
  7. class Person:
  8. def quack(self):
  9. print("I'm Quacking Like a Duck!")
  10. def fly(self):
  11. print("I'm Flapping my Arms!")
  12. def quack_and_fly(thing):
  13. pass
  14. # Not Duck-Typed (Non-Pythonic)
  15. # if isinstance(thing, Duck):
  16. # thing.quack()
  17. # thing.fly()
  18. # else:
  19. # print('This has to be a Duck!')
  20. # LBYL (Non-Pythonic)
  21. # if hasattr(thing, 'quack'):
  22. # if callable(thing.quack):
  23. # thing.quack()
  24. # if hasattr(thing, 'fly'):
  25. # if callable(thing.fly):
  26. # thing.fly()
  27. # try:
  28. # thing.quack()
  29. # thing.fly()
  30. # thing.bark()
  31. # except AttributeError as e:
  32. # print(e)
  33. d = Duck()
  34. print(type(dir(d)))