Python:为什么在特殊方法的ovveride中返回self

时间:2018-03-25 17:00:35

标签: python python-3.x override

我正在学习Python,今天学习了如何覆盖运算符。

这是一个简单的代码:

class Team:
    def __init__(self, members):
        self.members = members

    def __repr__(self):
        names = ", ".join(p.name for p in self.members)
        return "<Team Object [{}]".format(names)

    def __iadd__(self, other):

        if isinstance(other, Person):
            self.members.append(other)
            return self

        elif isinstance(other, Team):
            self.members.extend(other.members)
            return self (????????????)

        else:
            raise TypeError("Tipi non supportati")

我将两个团队联合起来:

guido = Person('Guido','van Rossum')
tim = Person('Tim', 'Peters')
alex = Person('Alex', 'Martelli')
ezio = Person('Ezio', 'Melotti')
t1 = Team([guido, tim])
t2 = Team([alex, ezio])

现在如果

t1 += t2
print(t1)

我得到了

&#34;返回自我&#34;在 iadd()

Team Object [Guido, Tim, Alex, Ezio]

没有&#34;回归自我&#34;在 iadd()

none

我不明白为什么在我看来,方法 iadd 更改对象的属性,所以我应该看到此更改,而不返回任何对同一对象的引用

1 个答案:

答案 0 :(得分:1)

+=仍然是一项任务操作。 Python会将调用t1.__iadd__(t2)的结果分配回t1。如果该方法返回None(如果它没有return语句则返回),那么这将被分配给t1;该对象将被修改,但随后丢失。