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
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/