内置不可变类型的子类友好版本?

时间:2013-10-13 12:13:05

标签: python subclass built-in-types

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

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

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

因为操作的结果将是float类型。该 我知道的解决方案是重写了几十种方法,但这是最多的 不切实际的。我无法相信没有别的办法。为什么没有 子类友好的UserInt,标准库中的UserFloat类型 在这些情况下使用过吗?

1 个答案:

答案 0 :(得分: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

这可以解决您的问题吗?