inheritance.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/usr/bin/env python3
  2. # Copyright 2009-2017 BHG http://bw.org/
  3. class Animal:
  4. def __init__(self, **kwargs):
  5. if 'type' in kwargs: self._type = kwargs['type']
  6. if 'name' in kwargs: self._name = kwargs['name']
  7. if 'sound' in kwargs: self._sound = kwargs['sound']
  8. def type(self, t = None):
  9. if t: self._type = t
  10. try: return self._type
  11. except AttributeError: return None
  12. def name(self, n = None):
  13. if n: self._name = n
  14. try: return self._name
  15. except AttributeError: return None
  16. def sound(self, s = None):
  17. if s: self._sound = s
  18. try: return self._sound
  19. except AttributeError: return None
  20. class Duck(Animal):
  21. def __init__(self, **kwargs):
  22. self._type = 'duck'
  23. if 'type' in kwargs: del kwargs['type']
  24. super().__init__(**kwargs)
  25. class Kitten(Animal):
  26. def __init__(self, **kwargs):
  27. self._type = 'kitten'
  28. if 'type' in kwargs: del kwargs['type']
  29. super().__init__(**kwargs)
  30. def print_animal(o):
  31. if not isinstance(o, Animal):
  32. raise TypeError('print_animal(): requires an Animal')
  33. print(f'The {o.type()} is named "{o.name()}" and says "{o.sound()}".')
  34. def main():
  35. a0 = Kitten(name = 'fluffy', sound = 'rwar')
  36. a1 = Duck(name = 'donald', sound = 'quack')
  37. print_animal(a0)
  38. print_animal(a1)
  39. if __name__ == '__main__': main()