是否有类似__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)