Python:如何对自定义类X的可迭代对象求和得到类Y?
累加第三方类X实例得到Y实例的简洁方法
针对你遇到的sum()默认从0开始导致报错的问题,这里有两种符合Python风格的解决方案:
方法一:使用functools.reduce + operator.add
这是最简洁的写法,直接从可迭代对象的第一个元素开始累加,完全避开初始值0的问题:
from functools import reduce import operator ex = [X1, X2, X3] y_instance = reduce(operator.add, ex)
reduce会依次将列表中的元素用+操作符累加:先计算X1 + X2得到Y实例,再用这个Y实例和X3相加,全程利用X类的__add__和__radd__方法完成运算。
方法二:手动循环累加(适合需要处理空列表的场景)
如果你的可迭代对象可能为空,需要自定义空值处理逻辑,手动循环会更灵活:
ex = [X1, X2, X3] if not ex: # 这里可以根据需求返回默认Y实例或抛出异常 raise ValueError("无法累加空的X实例列表") y_instance = ex[0] for item in ex[1:]: y_instance += item
为什么sum()不行?
sum()函数默认以0作为初始累加值,会先执行0 + X1,这会触发X1.__radd__(0)——而你的第三方X类的__radd__方法大概率没有实现与int类型的兼容逻辑,因此抛出类型错误。上面两种方法都避免了用0作为初始值,自然不会触发这个问题。
内容的提问来源于stack exchange,提问作者keynesiancross
相关产品推荐
相关产品推荐

