2016-03-25 16 views
0

は+ =演算子(角括弧のための場所で追加)

my_object[item] = ... 

私は__setitem__メソッドを定義する必要があります知っています。

私は次のステートメントに定義する必要がありますどのような方法

my_object[item] += ... 
+0

あなたは私が信じている '__iadd__'を探しています。 – idjaw

+0

質問に答えました[前](http://stackoverflow.com/questions/1047021/overriding-in-python-iadd-method) – Hang

+1

「__isetitem__」のようなものはありません。 'my_object [...]'では '__setitem__'と' __getitem__'を定義できますが、 'my_object [item] + = ...'は 'my_object [item] = my_object [item] +と異なります。 'my_object [item]'がインスタンスであるクラスを変更する必要があります。 – zondo

答えて

4

my_objectは、新しい値を設定するためにmy_object[item]__setitem__の初期値を取得するためには、__getitem__が必要です。

さらに、Pythonは追加を実行する方法が必要です。 my_object[item]は、__add__または__iadd__で追加を実装する必要があります。または、+=の右側のオブジェクトは__radd__を実装する必要があります。

1

__setitem__あなたのコンテナクラスに関連して、あなたをカバーします。通常の割り当てと同じように拡張割り当てを行うと呼び出されます。あなたのクラスが教える限り、x[i] += 1x[i] = x[i] + 1の間に違いはありません。

あなたが=または-=は異なる+=を処理する必要がある場合は、そのは項目のクラスの特殊な方法で処理されます。

関連する問題