首先,你需要明白之间的差别
__add__和
__iadd__。
对象的
__add__方法是常规加法:它接受两个参数,返回它们的总和,并且不修改任何一个参数。
对象的
__iadd__方法也有两个参数,但是就地进行更改,从而修改了第一个参数的内容。因为这需要对象突变,所以不可变类型(如标准数字类型)不应具有
__iadd__方法。
a + b用途
__add__。
a += b使用(
__iadd__如果存在);如果没有,它将通过进行仿真
__add__,如中所示
tmp= a + b; a = tmp。
operator.add并
operator.iadd以相同的方式有所不同。
另一个问题
operator.iadd(x, y)是:不等于
z = x; z +=y,因为如果不
__iadd__存在,
__add__则会使用。您需要分配值以确保两种情况下都存储结果
x = operator.iadd(x,y)。
您可以很容易地自己看到它:
import operatora = 1operator.iadd(a, 2)# a is still 1, because ints don't have __iadd__; iadd returned 3b = ['a']operator.iadd(b, ['b'])# lists do have __iadd__, so b is now ['a', 'b']



