|
|
- # 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()
|