我正在学习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 更改对象的属性,所以我应该看到此更改,而不返回任何对同一对象的引用
答案 0 :(得分:1)
+=
仍然是一项任务操作。 Python会将调用t1.__iadd__(t2)
的结果分配回t1。如果该方法返回None(如果它没有return语句则返回),那么这将被分配给t1;该对象将被修改,但随后丢失。