有没有办法在python中重载+ =?

时间:2009-04-08 03:01:53

标签: python operator-overloading

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

(1)如果__add__突变自我,那么

z = x + y
当我不想让x在那里变异时,

会变异x。

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

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

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

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

1 个答案:

答案 0 :(得分:73)

是。只需覆盖对象的__iadd__方法,该方法采用与add相同的参数。您可以找到更多信息here