为课程定义“ __sum__”

时间:2018-06-26 06:23:41

标签: python oop

是否存在类似于__sum__的{​​{1}}方法,以便将类的实例列表汇总到新的类实例中?

我需要这样做,因为在我的情况下,__add__应该不同于sum([a,b,c])。换句话说,总和实际上取决于任意数量的参数,并且不能根据二进制操作sum([sum([a,b]), c])进行定义。

2 个答案:

答案 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()