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 Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/