# duck typing example taken from wikipedia # https://de.wikipedia.org/wiki/Duck-Typing class Bird: """Birds have a name that they return in string represention""" def __init__(self, name): self.name = name def __str__(self): return self.__class__.__name__+' '+self.name class Duck(Bird): """Ducks are birds which can quak""" def quak(self): print(str(self)+': quak') class Frog: """Frogs also can quak""" def quak(self): print(str(self)+': quak') def main(): ducks = [Bird('Gustav'), Duck('Donald'), object()] for duck in ducks: # exception handling when object hasn't quak method try: duck.quak() except AttributeError: print('No duck:', duck) ducks.append(Frog()) for duck in ducks: # we also can use hasattr() function instead of exception handling if hasattr(duck, 'quak'): duck.quak() else: print('No duck:', duck) if __name__ == "__main__": main()