试试这个简单的代码(MCVE):
class Foo(object):
def __init__(self, val):
self.v = val
def __add__(self, other):
return Foo(self.v + other.v)
def __iadd__(self, other):
print('before iadd v = {}'.format(self.v))
self.v = (self + other).v
print('after iadd v = {}'.format(self.v))
def __str__(self):
return repr(self)
def __repr__(self):
return 'Foo.__repr__({})'.format(self.v)
a = Foo(3)
b = Foo(5)
a += b
print('Now a is {}'.format(a))
输出
before iadd v = 3
after iadd v = 8
Now a is None
我认为a += b
应该就地修改a
(这就是我在Foo.__iadd__()
中写的内容。这让我困惑了很长时间。我预计最后一行应该是< / p>
Now a is Foo.__repr__(8)
答案 0 :(得分:2)
因为您在__iadd__
方法中没有返回任何内容。尝试回归自我。