You need to enable JavaScript to run this app. Python Calculator类调用sum方法报类型错误及减法除法运算顺序问题
优惠活动
大模型
产品
解决方案
定价
更多

Python Calculator类调用sum方法报类型错误及减法除法运算顺序问题

报错根源

你遇到的unsupported operand type(s) for +: 'int' and 'Calculator'错误,核心是实例方法的参数定义错误:
Python 类的实例方法默认第一个参数会接收当前实例对象本身,你之前定义sum方法时写的是def sum(*args),调用t.sum()时,Python会自动把t这个Calculator实例作为第一个参数传入args,导致循环时出现整数 + Calculator实例的非法运算。

修正后完整实现

基础求和、乘法方法

按照规范给实例方法加self参数,遍历实例存储的参数:

class Calculator(object):
    def __init__(self, *args):
        self.args = args

    def sum(self):
        result = 0
        for arg in self.args:
            result += arg
        return result

    def mul(self):
        result = 1
        for arg in self.args:
            result *= arg
        return result

减法、除法逻辑修正

你之前的减法、除法结果顺序颠倒,是因为初始值设置和遍历逻辑完全反了:

你之前写的减法实现result = 0后循环执行result = arg - result,对应参数(3,4)的运算过程是:3 - 0 = 3 → 4 - 3 = 1,自然输出颠倒后的结果。

  • 减法、除法属于左结合运算,必须以第一个传入的参数为初始值,再依次对后续参数做运算,才符合用户的参数顺序预期
  • 之前从0开始反向用参数减/除结果的写法,会把运算顺序变成逆序,自然得到颠倒的结果

修正后的减法、除法方法:

def subtract(self):
        if not self.args:
            raise ValueError("减法运算至少需要传入1个参数")
        # 初始值取第一个参数
        result = self.args[0]
        # 从第二个参数开始遍历做减法
        for arg in self.args[1:]:
            result -= arg
        return result

    def divide(self):
        if not self.args:
            raise ValueError("除法运算至少需要传入1个参数")
        result = self.args[0]
        for arg in self.args[1:]:
            if arg == 0:
                raise ZeroDivisionError("除数不能为0")
            result /= arg
        return result

测试验证
t = Calculator(3,4)
print(t.sum())       # 输出7
print(t.mul())       # 输出12
print(t.subtract())  # 输出-1(3-4,符合预期)
print(t.divide())    # 输出0.75(3/4,符合预期)

# 多参数场景测试
t2 = Calculator(10, 5, 2)
print(t2.subtract()) # 输出3(10-5-2)
print(t2.divide())    # 输出1.0(10/5/2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 01:36:03