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

如何用Python魔术方法实现自定义对象列表的求和操作?

用Python魔术方法实现自定义类实例的sum求和

要让sum()直接对A类实例的列表求和,你可以利用Python的右侧加法魔术方法__radd__,它专门处理左侧操作数不支持与当前类实例相加的场景(比如sum初始值0和A实例相加的情况)。

实现代码

class A:
    def __init__(self, x):
        self.x = x

    def __radd__(self, other):
        # 处理左侧为数值、右侧为A实例的加法
        return other + self.x

a_list = [A(1), A(3)]
sum_x = sum(a_list)
print(sum_x)  # 输出:4

原理说明

sum()函数的执行逻辑是从初始值(默认0)开始,依次将累加值与列表中的每个元素相加:

  1. 第一步:0 + A(1)。由于整数0的__add__方法无法处理A实例,Python会调用A(1)的__radd__方法,返回0 + 1 = 1。
  2. 第二步:1 + A(3)。同样,整数1无法直接加A实例,调用A(3)的__radd__方法,返回1 + 3 = 4。
  3. 最终得到所有实例x属性的总和。

扩展:支持实例间直接相加(可选)

如果还需要让A实例之间能直接相加(比如A(1) + A(3)),可以再实现__add__方法:

class A:
    def __init__(self, x):
        self.x = x

    def __add__(self, other):
        if isinstance(other, A):
            return self.x + other.x
        raise TypeError("只能与A类实例相加")

    def __radd__(self, other):
        if other == 0:
            return self.x
        return self.__add__(other)

这样既支持sum(a_list),也支持A(1) + A(3)得到4。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:57:49