我正在尝试在对象列表中使用内置函数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
添加内容,而不是相反。
答案 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)