微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:在类内调用方法给出“不支持的操作数类型”错误

如何解决Python:在类内调用方法给出“不支持的操作数类型”错误

我试图在我的 Calculator 类中调用 sum 函数,但它给了我以下错误
unsupported operand type(s) for +: 'int' and 'Calculator'.
但是,如果我要在类之外使用该函数调用它,则它可以正常工作。非常感谢任何帮助。

#解决方

class Calculator(object):
    
    def __init__(self,*args):
        self.args = args
    
    def sum(*args): //Change to self
        result = 0

        for arg in args://Change to self.args
            result = result + arg

        return result

t = Calculator(3,4,5)
t.sum()

*跟进问题;添加其余的运算符(/,,-) 对于乘法,我基本上可以使用相同的语法

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

问题发生在除法和减法上。当函数必须考虑参数的位置时。

def subtract(self):
    result = 0

    for arg in self.args:
        result = arg - result

    return result 

像以前一样调用我的函数

t = Calculator(3,4). 
t.subtract() 
# output 
1 (4 -3)
# wanted output
-1 (3-4)

同样适用于除法,其中 Calculator(x,y) 给出 (y/x)。

解决方法

您忘记了方法中的 self 参数。

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

请注意,如果您使用的是 Python 3,则不必对 object 类进行子类化。sum(self.args) 是您可以进行的另一个简化。


对后续问题的回答

您可以使用 operator 模块。

from functools import reduce
import operator


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

    def subtract(self):
        return reduce(operator.sub,self.args[1:],self.args[0])
    
    def divide(self):
        return reduce(operator.truediv,self.args[0])

print(Calculator(3,4).subtract())  # -1
print(Calculator(3).subtract())  # 3
print(Calculator(3,4,5).subtract())  # -6
print(Calculator(3,4).divide())  # 0.75

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。