__add__列表的所有元素

时间:2012-02-26 19:28:05

标签: python

我想组合一个类的类实例列表,其中定义了__add__方法。

即,我有一个类实例L=[A,B,C,D]的列表,我想要它们的总和E = A+B+C+D,但是一般化,以便我可以做+语法而不是E = sum(L)语法。 }。

我应该用什么功能来做呢? __add__方法是否合适,或者我是否需要定义不同的类方法(例如__iadd__)才能实现此目的?

(如果这是重复的,我该怎么问这个问题?)

3 个答案:

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