不変型をサブクラス化するかint
、次のコンソールセッションに示すように動作する独自の型を実装したいと思います。
>>> i=42
>>> id(i)
10021708
>>> i.__iadd__(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute '__iadd__'
>>> i += 1
>>> i
43
>>> id(i)
10021696
当然のことながら、int
オブジェクトには__iadd__()
メソッドがありませんが、オブジェクトに適用+=
してもエラーは発生しません。代わりに、オブジェクトが新しいものint
を作成し、拡張代入ステートメントで指定された名前に魔法のように再割り当てします。
これを行う組み込みの不変クラスのユーザー定義クラスまたはサブクラスを作成することは可能ですか?作成する場合は、どのように行いますか?