TypeError:使用sum时+的不支持的操作数类型

时间:2017-06-02 14:43:29

标签: python sum add

我有一个自己实现__add__的课程:

class Point(namedtuple('Point', ['x', 'y', 'z'])):
    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y, self.z + other.z)

添加按预期工作:

l = [Point(0,0,0), Point(0,1,2)]
s = l[0]
for a in l[1:]:
    s = s + a

但是当我使用内置sum时,我收到错误:

s = sum(l)
  

TypeError:+:' int'不支持的操作数类型和'点'

我的代码有什么问题?没有sum使用__add__吗?我还应该覆盖什么?

2 个答案:

答案 0 :(得分:4)

sum函数使用整数值0初始化其结果变量:

sum(iterable[, start]) -> value

    Return the sum of an iterable of numbers (NOT strings) plus the value
    of parameter 'start' (which defaults to 0).

因此,在总和中,执行了加法0 + Point(0,0,0),您的班级不支持。

要解决此问题,请为start传递合适的值:

s = sum(l, Point(0,0,0))

答案 1 :(得分:2)

您还可以覆盖__radd__()功能:

def __radd__(self, other):
    return Point(self.x + other, self.y + other, self.z + other)

请注意,必须另外以覆盖__add__()