2009-04-08 156 views
27

我知道有关__add__方法重写加,但是当我使用重写+ =,我结束了两个问题中的一个:有没有办法在python中重载+ =?

(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()方法,但如果可能的话,我宁愿重载+=

+10

RTFM是一种濒危物种的程序员。 – tzot 2009-04-08 22:21:18

+2

@zot在某种程度上,你正在寻找F'ing M. ;-) – 2016-04-02 09:24:35

回答

50

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