simple, ligero, pero la idea extensible:
class Money():
def __init__(self, value):
# internally use Decimal or cents as long
self._cents = long(0)
# Now parse 'value' as needed e.g. locale-specific user-entered string, cents, Money, etc.
# Decimal helps in conversion
def as_my_app_specific_protocol(self):
# some application-specific representation
def __str__(self):
# user-friendly form, locale specific if needed
# rich comparison and basic arithmetics
def __lt__(self, other):
return self._cents < Money(other)._cents
def __add__(self, other):
return Money(self._cents + Money(other)._cents)
Puede:
- Implementar sólo lo que necesita en su aplicación.
- Extiéndalo a medida que crece.
- Cambie la representación interna y la implementación según sea necesario.
Siempre pensé que la conversión de divisas es solo una multiplicación. – SilentGhost
@SilentGhost: Sí y no. Tienes que tener en cuenta * cómo * vas a usar los valores que tienes. ¿Cómo se siente cuando pagó U $ S2000 + AR $ 6300 + € 1500 el año pasado y este año pagó U $ S4000 + AR $ 1200 + € 500?Hay muchas cosas que debe tener en cuenta, por lo que un objeto 'Money' tendría que guardar el valor histórico * y * el valor actual. – voyager
Peligro a evitar: usar números en coma flotante. Ver Espacio de oficina. –