class A:
def __init__(self):
self.quantity = 1
def __add__(self, other):
self.quantity += other.quantity
del other # Not deleting.
return self
def __radd__(self, other):
if other == 0:
return self
else:
return self.__add__(other)
def __str__(self):
return f'{self.quantity}'
def __repr__(self):
return f'<A object: {self.quantity}>'
if __name__ == '__main__':
a = A()
b = A()
array = [a,b]
print(sum(array))
print(array)结果:
2
[<A object: 2>, <A object: 1>]预期结果:
2
[<A object: 2>]该函数正在正常添加,但del没有删除列表中的其他项。
在使用del other之后,我尝试使用other,但它打印了一个错误。但它不会从列表中删除该项目。
发布于 2020-03-05 10:09:49
问题是del并没有像你想象的那样工作。我的猜测是,您认为这会导致在del之后的名称引用的值被删除。实际发生的情况是,以del命名的引用从当前名称空间中删除。
如果该引用是对该值的最后引用,则最终(可能立即,但可能不会很长时间),被引用的值将被删除。
您的del other仅删除名为other的引用,没有可检测到的效果。它不会(也不能)更改传递给sum的列表的内容。
https://stackoverflow.com/questions/60537084
复制相似问题