You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义类实例列表调用内置sum函数报错问题

报错根本原因

内置sum函数默认的累加起始值是整数0,函数签名为sum(iterable, /, start=0)。你直接调用sum([a, b, c])时,实际执行的计算流程是0 + a + b + c,第一步就是整数和自定义string实例做加法,自然会抛出类型不匹配的错误。
你重写__iter__方法完全是找错了方向:sum只会遍历你传入的列表对象本身,根本不会调用列表内每个string实例的__iter__方法,你在方法里加的打印语句当然不会触发。

可行解决方案

选任意一种即可:

  • 调用sum时手动指定合法的起始值,不需要修改原有类代码:
# 传入自定义string类的空实例作为累加起点
print(sum([a, b, c], start=string('')))

执行后计算流程为string('') + a + b + c,完全复用你已经实现的__add__逻辑,可正常输出abc。

  • 给自定义类补充反向加法方法__radd__,兼容sum默认的整数0起始值:
    在类中新增如下方法:
def __radd__(self, other):
    # 左操作数为sum默认的起始值0时,直接返回当前实例即可
    if other == 0:
        return self
    return self._new(other, str.__add__)

添加后即使不传start参数,执行0 + a时会自动调用a.__radd__(0)返回实例a,后续累加流程可正常走完。

补充提示

你的自定义string类是单值封装类型,不是容器,本身不需要实现__iter__方法,之前的尝试属于完全没摸到报错根源做的无用功。

内容的提问来源于stack exchange,提问作者user16004728

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:45:44