51

plus をオーバーライドする方法については知ってい__add__ますが、それを使用して += をオーバーライドすると、次の 2 つの問題のいずれかが発生します。

(1)__add__自分自身を変異させた場合

z = x + y

x をそこで変異させたくない場合は、x を変異させます。

(2)__add__新しいオブジェクトを返す場合、

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

の実行後に z と tmp が別のオブジェクトを指しているため、 w なしで何かを返しますz += x

ある種のメソッドを作成できますが、可能であれば.append()オーバーロードしたいと思います。+=

4

1 に答える 1

96

はい。__iadd__と同じパラメータを取るオブジェクトのメソッドをオーバーライドするだけaddです。詳細については、こちらをご覧ください。

于 2009-04-08T03:06:14.207 に答える