是否有类似__sum__
方法,类似于__add__
,以便将类的实例列表总结为一个新的类实例?
我需要这个,因为在我的情况下sum([a,b,c])
应该与sum([sum([a,b]), c])
. 换句话说,总和实际上取决于任意数量的参数,并且不能用二元运算来定义__add__
。
如果您只是定义,则求和将不起作用,__add__
因为正如这所解释的,该sum
函数以 integer 开头0
,并且0 + YourClass
将是未定义的。
所以,你也需要定义__radd__
。这是一个允许您总结的实现:
def __radd__(self, other):
if other == 0:
return self
else:
return self.__add__(other)
Run Code Online (Sandbox Code Playgroud)
现在你的班级应该能够总结得很好。
Wil*_*oho -2
sum
是Python中的内置函数。__add__
是一种特殊的方法。每个容器对象(例如列表)都有一个__add__
方法。您可以在指南中看到它。__add__
容器对象和数字对象中的方法的工作方式不同。
l = [1, 2, 3]
b = [4, 5, 6]
# Concatenation using .__add__()
print(l.__add__(b))
Run Code Online (Sandbox Code Playgroud)
结果将是两个列表的串联,
[1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
而__add__
数值对象中的方法将进行加法运算。
x = 2
y = 3
# addition operation: 2 + 3 = 5
print(x.__add__(y))
Run Code Online (Sandbox Code Playgroud)
您可以使用方法创建自定义列表sum
。
class Custom(list):
# adding sum() functionallity
def sumup(self):
return sum(self)
Run Code Online (Sandbox Code Playgroud)
像这样创建新的自定义列表对象,
l = Custom([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
并调用 sumup 方法对自定义列表中的所有值求和
l.sumup()
Run Code Online (Sandbox Code Playgroud)