3

当您只想使用具有不同字符串表示的内置类型时,这是一种常见的情况。例如,考虑一个变量来存储时间测量。通常,对于所有意图和目的,您都需要一种行为与 int 或 float 完全相同的类型,除非强制转换为 string 时会生成格式为 HH:MM:SS 或类似内容的字符串。

应该很容易。不幸的是,以下不起作用

class ElapsedTime(float):
    def __str__(self):
        return 'XXX'

因为操作的结果将是浮点类型。我知道的解决方案是重写几十种方法,但这是最不切实际的。我不敢相信没有别的办法。为什么标准库中没有用于这些情况的子类友好的 UserInt、UserFloat 类型?

4

1 回答 1

0
In [1]: class float2(float):
   ...:     def __init__(cls,val):
   ...:         return float.__init__(cls,val)
   ...:     def __str__(cls):
   ...:         return str(cls.real).replace(".",":")
   ...:     def __add__(cls,other):
   ...:         return float2(cls.real + other.real)
   ...:     ## similarly implement other methods...  
   ...:     

In [2]: float2(20.4)
Out[2]: 20.4

In [3]: print float2(20.4)
20:4

In [4]: x = float2(20.4) + float2(10.1)

In [5]: x
Out[5]: 30.5

In [6]: print x
30:5

In [7]: x = float2(20.4) + float(10.1)

In [8]: x
Out[8]: 30.5

In [9]: print x
30:5

这能解决你的问题吗?

于 2013-10-13T12:50:39.140 回答