求和类实例

时间:2014-02-21 13:33:35

标签: python object sum

我正在尝试在对象列表中使用内置函数sum()并作为结果获取对象。

以下是我的代码摘录:

class vector:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return vector(self.x+other.x, self.y+other.y)

l = []
l.append(vector(3, 5))
l.append(vector(-2, 3))
l.append(vector(0,-4))

net_force = sum(l)

我收到错误:

TypeError: unsupported operand type(s) for +: 'int' and 'instance'

我想这是因为sum()最初将结果设置为0然后遍历列表,但我只能定义向vector添加内容,而不是相反。

3 个答案:

答案 0 :(得分:6)

设置起始条件(参见Python documentation):

net_force = sum(l, vector(0, 0))

答案 1 :(得分:2)

您的另一个选择是将__add__略微修改为特殊情况,即

class vector(object):

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        if other == 0:
            return self
        else:
            return vector(self.x+other.x, self.y+other.y)

这将使sum能够在不指定初始条件的情况下工作....

答案 2 :(得分:0)

你可以这样做:

net_force = vector(0,0)
for i in l:
    net_force += i

或许你可以找到答案here