问题描述
我试图在我的 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