当您只想使用内置类型时,这是一种常见的情况 只有不同的字符串表示。例如,考虑一个 变量来存储时间测量值。通常,您需要一种行为类型 完全像int或float的所有意图和目的除了当 强制转换为字符串会产生一个格式为HH:MM:SS或类似字符串的字符串。
应该很容易。不幸的是,以下不起作用
class ElapsedTime(float):
def __str__(self):
return 'XXX'
因为操作的结果将是float类型。该 我知道的解决方案是重写了几十种方法,但这是最多的 不切实际的。我无法相信没有别的办法。为什么没有 子类友好的UserInt,标准库中的UserFloat类型 在这些情况下使用过吗?
答案 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
这可以解决您的问题吗?