[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