gpt4 book ai didi

Python:为什么在重写特殊方法时返回 self

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:42 24 4
gpt4 key购买 nike

我正在学习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)

我得到了

iadd()中使用“return self”

Team Object [Guido, Tim, Alex, Ezio]

iadd()中没有“返回自身”

none

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

最佳答案

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

关于Python:为什么在重写特殊方法时返回 self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49478433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com