51

我知道__add__覆盖 plus 的方法,但是当我使用它来覆盖 += 时,我最终遇到了两个问题之一:

(1) 如果__add__自我变异,则

z = x + y

当我真的不希望 x 在那里发生变异时,会变异 x 。

(2) 如果__add__返回一个新对象,则

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

将返回没有 w 的东西,因为 z 和 tmp 在执行后指向不同的对象z += x

我可以制作某种方法,但如果可能的话.append(),我更愿意重载。+=

4

1 回答 1

96

是的。只需覆盖对象的__iadd__方法,该方法采用与add. 您可以在此处找到更多信息。

于 2009-04-08T03:06:14.207 回答