如何通过__add__方法实现Python自定义类多个对象的相加?
解决多实例连续相加的问题
问题出在你的__add__方法直接返回了整数,导致aa + bb得到int类型,后续无法和a类实例继续执行+操作。要支持任意数量的实例连续相加,需要让__add__返回**a类的实例**,而不是直接返回整数,这样每次相加都是实例间的操作,最后再转换为整数即可。
修改后的代码:
class a(): def __init__(self, val): self.val = val def __add__(self, other): # 返回新的a实例,而非直接返回数值 return a(self.val + other.val) # 实现__int__方法,方便将实例转为整数 def __int__(self): return self.val # 可选:添加__repr__方便调试查看实例 def __repr__(self): return f"a({self.val})" # 测试 aa = a(22) bb = a(11) cc = a(11) # 连续相加后转成整数 total = int(aa + bb + cc) print(total) # 输出44
如果需要支持实例和普通整数的混合相加(比如aa + 5或者5 + aa),可以补充__radd__方法:
def __radd__(self, other): # 处理左操作数是整数的情况 return a(other + self.val)
这样不管是多个实例连续相加,还是实例和整数混合相加,都能正常工作,最后通过int()转换就能得到你需要的整数结果。
内容的提问来源于stack exchange,提问作者Artier
相关产品推荐
相关产品推荐

