我想组合一个类的类实例列表,其中定义了__add__
方法。
即,我有一个类实例L=[A,B,C,D]
的列表,我想要它们的总和E = A+B+C+D
,但是一般化,以便我可以做+
语法而不是E = sum(L)
语法。 }。
我应该用什么功能来做呢? __add__
方法是否合适,或者我是否需要定义不同的类方法(例如__iadd__
)才能实现此目的?
(如果这是重复的,我该怎么问这个问题?)
答案 0 :(得分:4)
import operator
reduce(operator.add, L)
答案 1 :(得分:4)
sum
可能希望将数值添加到您的类的实例中。定义__radd__
,以便定义int
+ Foo(1)
:
class Foo(object):
def __init__(self, val):
self.val = val
def __add__(self, other):
return self.val + other.val
def __radd__(self, other):
return other + self.val
A = Foo(1)
B = Foo(2)
L = [A,B]
print(A+B)
# 3
print(sum(L))
# 3
答案 2 :(得分:1)
忽略我之前的回答,这是错误的。
reduce
函数允许您将任何二元函数或方法应用于序列的所有元素。所以,你可以写:
reduce(YourClass.__add__, sequence)
如果序列中的所有对象都不是同一个类的实例,那么请使用:
import operator
reduce(operator.add, sequence)
或者这个:
reduce(lambda x, y: x + y, sequence)