3

これは、異なる文字列表現でのみ組み込み型を使用したい場合によくあるシナリオです。たとえば、時間測定値を格納する変数を考えてみましょう。通常、文字列に強制すると HH:MM:SS などの形式の文字列が生成されることを除いて、すべての意図と目的で int または float とまったく同じように動作する型が必要です。

簡単なはずです。残念ながら、以下は機能しません

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

演算の結果は float 型になるためです。私が知っている解決策は、数十個のメソッドを書き直すことですが、これは最も非現実的です。他に方法がないなんて信じられない。これらの状況で使用することを意図した標準ライブラリに、サブクラスに適した 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 に答える