__init__.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # -*- coding: utf-8 -*-
  2. import yaml
  3. class Figure(object):
  4. def __init__(self, value, unit):
  5. self.value = value
  6. self.unit = unit
  7. def get_value(self):
  8. return self._value
  9. def set_value(self, value):
  10. self._value = value
  11. """ use property() instead of decorator to enable overriding """
  12. value = property(get_value, set_value)
  13. def get_unit(self):
  14. return self._unit
  15. def set_unit(self, unit):
  16. assert type(unit) is unicode
  17. self._unit = unit
  18. """ use property() instead of decorator to enable overriding """
  19. unit = property(get_unit, set_unit)
  20. class Distance(Figure):
  21. def __init__(self, value, unit):
  22. assert type(value) is float
  23. super(Distance, self).__init__(value, unit)
  24. @property
  25. def metres(self):
  26. if self.unit == 'km':
  27. return self.value * 1000
  28. else:
  29. raise Exception()
  30. class Sum(Figure):
  31. def __init__(self, value, currency):
  32. super(Sum, self).__init__(value, currency)
  33. def get_value(self):
  34. return super(Sum, self).get_value()
  35. def set_value(self, value):
  36. assert type(value) is float
  37. super(Sum, self).set_value(value)
  38. """ use property() instead of decorator to enable overriding """
  39. value = property(get_value, set_value)
  40. @property
  41. def currency(self):
  42. return self.unit
  43. def get_unit(self):
  44. return super(Sum, self).get_unit()
  45. def set_unit(self, currency):
  46. if currency == u'€':
  47. currency = u'EUR'
  48. assert type(currency) is unicode
  49. assert currency in [u'EUR']
  50. super(Sum, self).set_unit(currency)
  51. """ use property() instead of decorator to enable overriding """
  52. unit = property(get_unit, set_unit)