是否存在类似于__sum__
的{{1}}方法,以便将类的实例列表汇总到新的类实例中?
我需要这样做,因为在我的情况下,__add__
应该不同于sum([a,b,c])
。换句话说,总和实际上取决于任意数量的参数,并且不能根据二进制操作sum([sum([a,b]), c])
进行定义。
答案 0 :(得分:4)
如果仅定义__add__
,则求和将不起作用,因为正如this所述,sum
函数以整数0
开头,而0 + YourClass
将是未定义。
因此,您还需要定义__radd__
。这是一个实现,可以让您总结一下:
def __radd__(self, other):
if other == 0:
return self
else:
return self.__add__(other)
现在您的班级应该可以加起来了。
答案 1 :(得分:0)
Sum是python中的内置函数。 添加是一种特殊方法。每个容器对象(例如list)都有 add 方法。您可以在guide中看到它。容器对象和数字对象中的 add 方法工作方式不同。
l = [1,2,3]
b = [4,5,6]
#Concatenation using .__add__()
print(l.__add__(b))
结果将是两个列表的串联。
[1,2,3,4,5,6]
,而数字对象中的 add 方法将执行加法运算。
x = 2
y = 3
#addition operation
print(x.__add__(y))
您可以使用sum方法创建自定义列表。
class Custom(list):
#adding sum() functionallity
def sumup(self):
return sum(self)
创建新的自定义列表对象,如下所示:
l = Custom([1,2,3])
并调用sumup方法对自定义列表中的所有值求和
l.sumup()