El 07/02/2012 20:39, Juan José Gómez Romera escribió:
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:

 ....

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


Puedes heredar directamente de float y jugar con __new__

>>> class floattime(float):
... rates={"s": 1., "min": 60, "h": 60*60, "day": 60*60*24, "year": 60*60*24*365}
...     def __new__(cls, val, unit="s"):
...         return float.__new__(cls, val * cls.rates[unit])
...
>>>
>>> t1 = floattime(3, "day")
>>> t1
259200.0
>>> type(t1)
<class '__main__.floattime'>
>>>
>>> t1 + floattime(4, "h")
273600.0


Un saludo,

--
Oswaldo
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a