# -*- coding: utf-8 -*- import yaml class Figure(object): def __init__(self, value, unit): self.value = value self.unit = unit def get_value(self): return self._value def set_value(self, value): self._value = value """ use property() instead of decorator to enable overriding """ value = property(get_value, set_value) def get_unit(self): return self._unit def set_unit(self, unit): assert type(unit) is unicode self._unit = unit """ use property() instead of decorator to enable overriding """ unit = property(get_unit, set_unit) class Distance(Figure): def __init__(self, value, unit): assert type(value) is float super(Distance, self).__init__(value, unit) @property def metres(self): if self.unit == 'km': return self.value * 1000 else: raise Exception() class Sum(Figure): def __init__(self, value, currency): super(Sum, self).__init__(value, currency) def get_value(self): return super(Sum, self).get_value() def set_value(self, value): assert type(value) is float super(Sum, self).set_value(value) """ use property() instead of decorator to enable overriding """ value = property(get_value, set_value) @property def currency(self): return self.unit def get_unit(self): return super(Sum, self).get_unit() def set_unit(self, currency): if currency == u'€': currency = u'EUR' assert type(currency) is unicode assert currency in [u'EUR'] super(Sum, self).set_unit(currency) """ use property() instead of decorator to enable overriding """ unit = property(get_unit, set_unit)