自我添加后,对象变为无......?

时间:2018-03-03 06:16:01

标签: python python-3.x operator-overloading

试试这个简单的代码(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)

1 个答案:

答案 0 :(得分:2)

因为您在__iadd__方法中没有返回任何内容。尝试回归自我。