Decimal クラスを拡張して、特にお金を処理するための便利なメソッドをいくつか追加したいと思います。
私がこれを行うときの問題:
from decimal import Decimal
class NewDecimal(Decimal):
def new_str(self):
return "${}".format(self)
d1 = NewDecimal(1)
print d1.new_str() # prints '$1'
d2 = NewDecimal(2)
d3 = NewDecimal(3)
d5 = d2 + d3
print d5.new_str() #exception happens here
例外がスローされます。
AttributeError: 'Decimal' object has no attribute 'new_str'
これは、Decimal が算術を行う方法によるもので、計算の最後に文字通り Decimal( new value ) を呼び出すことにより、常に新しい Decimal オブジェクトを返します。
すべての演算を完全に再実装する以外に、これに対する回避策はありませんか?