[Python-es] Clase heredada de float con varios argumentos
Juan José Gómez Romera
jjgomera en gmail.com
Mar Feb 7 20:39:38 CET 2012
Hola
Quiero crear una clase que herede de float toda la funcionalidad, pero que
a la vez me permita acepta un segundo parámetro, de momento esto es lo que
tengo:
class time(object):
> """Class that models a time measure with conversion utilities
> Supported units:
> * second (s) default
> * minute (min)
> * hour (h)
> * day (day)
> * year (year)
>
> >>> t=Time(1, "day")
> >>> print t.min, t.h
> 1440.0 24.0
> """
> rates={"s": 1., "min": 60, "h": 60*60, "day": 60*60*24, "year":
> 60*60*24*365}
>
> def __init__(self, data, unit="s"):
> if data:
> self.__data = float(data)
> else:
> self.__data=0.
>
> try:
> conversion=self.rates[unit]
> except KeyError:
> raise ValueError("Wrong input code")
> self.__data*=conversion
>
> for key in self.rates:
> self.__setattr__(key, self.__data/self.__class__.rates[key])
>
>
>
> if __name__ == "__main__":
> T=time(5, "h")
> print T.s
>
Funciona perfectamente, pero para poder usarlo en cálculos necesito darle
soporte para operaciones, puedo hacerlo añadiendo las __add__, __sub__,
__mul__ a mano. Supongo que se podrá hacer heredandolo de float en vez de
object para que herede todas las capacidades de cálculo sin tener que
añadirlas a mano, pero no se como hacerlo ya que necesito dos variables de
entrada.
Y ya que estamos, otra duda relacionada con esta clase, ¿cómo puedo hacer
para que al invorcar la instancia sin atributos me devuelva la unidad por
defecto y no el nombre de la instancia. Con __repr__ valdría pero yo lo que
quiero es que me devuelva un float, no un string
>>>T=time(5, "min")
> >>>print T #lo que
> pasa
>
<__main__.time object at 0xb74ef56c>
>
>>>print T #lo que
> me gustaría que pasara
>
300.0
>
Gracias de antemano
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20120207/7e3f5ddf/attachment.html>
Más información sobre la lista de distribución Python-es