#!/usr/bin/python3
# ==================================================================
# Duck typing
# If it walks like a duck and quacks like a duck, it's a duck.
# ------------------------------------------------------------------
# Title: Python Tutorial: Duck Typing and Asking Forgiveness,
# Not Permission (EAFP)
# From: www.youtube.com/watch?v=x3v9zMX1s4sython3
# ==================================================================
class Duck:
def quack(self):
print('Quack, Quack!')
def fly(self):
print('Flap, Flap!')
class Person:
def quack(self):
print("I'm quacking like a Duck!")
def fly(self):
print("I'm flapping my arms!")
## non-pythonic way
##def quack_and_fly(thing):
## # not a duck type
## if isinstance(thing,Duck):
## thing.quack()
## thing.fly()
## else:
## print('This is not a Duck!')
## print()
## pythonic way
def quack_and_fly(thing):
try:
thing.quack()
thing.fly()
except AttributeError as e:
print(e)
print()
d = Duck()
quack_and_fly(d)
p = Person()
quack_and_fly(p)