2009-04-08 7 views
27

私はオーバーライドする__add__方法について知っているプラ​​ス、私は= +オーバーライドするためにそれを使用する場合、私は2つの問題のいずれかで終わる:Pythonで+ =オーバーロードする方法はありますか?

z = x + y 
その後、

(1)__add__は自己を変異させる場合

は、実際にはxをそこで変異させたくないときにxを変異させます。 __add__が新しいオブジェクトを返す場合z += x後の異なるオブジェクトにz及びTMPポイントが実行されるため

(2)、次いで

tmp = z 
z += x 
z += y 
tmp += w 
return z 

は、Wせず何かを返します。

.append()メソッドを作成できますが、可能であれば+=をオーバーロードすることをお勧めします。

+10

RTFMは絶滅危惧種であるプログラマ。 – tzot

+2

ところで、あなたはF'ing M.を見ています;-) –

+0

JoshはPythonのマニュアル作成者の一人であることを暗示していますか?申し訳ありませんが、私はあなたが何を意味するかわからない、@ BobStein-VisiBone。 – tzot

答えて

50

はい。オブジェクトの__iadd__メソッドをオーバーライドするだけです。このメソッドは、addという同じパラメータを使用します。詳細はhereをご覧ください。

+1

+1:ドキュメントを引用してください:-) –

関連する問題