函数缺少1个必需的位置参数

2024-04-28 23:55:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到这个错误:

Traceback (most recent call last):
  File "C:/Users/mali03/Desktop/Python/Practice/p2.py", line 18, in <module>
    first.subtraction(1, 2)
TypeError: subtraction() missing 1 required positional argument: 'y'

这是我的计算器课

class calculator:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def addition(self, x, y):
        return self.x + self.y

    def subtraction(self, x, y):
        if self.x > self.y:
            return self.y - self.x
        else:
            return self.x - self.y

然后我用以下方法调用减法:

first = calculator
first.subtraction(1, 2)

Tags: selfmostreturndef错误callcalculatorusers
3条回答

不需要在subtractionaddition中指定xy

class calculator:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def addition(self):
        return self.x + self.y

    def subtraction(self):
        if self.x > self.y:
            return self.y - self.x
        else:
            return self.x - self.y

self将涵盖为您检索xy,因为您正在引用这些实例变量。否则,需要在调用时指定它们:

# Yields 2-1 rather than 4-3
result = calculator(1,2).subtraction(3,4)

但是,在实例化类时需要指定它们

myinst = calculator(1,2)

如前所述,如果您已经在初始化函数中收集了该信息,则不必在加法减法函数中包含参数。

就像这样:

class calculator:

def __init__(self, x, y):
    self.x = x
    self.y = y

def addition(self):
    return self.x + self.y

def subtraction(self):
    if self.x > self.y:
        return self.y - self.x
    else:
        return self.x - self.y


first = calculator
print(first(5,10).addition())

或者,如果您确实希望在加法减法函数中包含xy参数,您可以像这样调整代码:

class calculator:

def addition(self, x, y):
    return x + y

def subtraction(self, x, y):
    if x > y:
        return y - x
    else:
        return x - y

first = calculator
print(first().addition(5, 10))

其中单个函数的参数被用于给类对象的参数。

无论哪种方式都有效,这取决于你想如何使用这个类。

或者你可以:

class calculator():

    def addition(self, x, y):
        return x + y

    def subtraction(self, x, y):
        if x > y:
            return y - x
        else:
            return x - y

first = calculator()
print(first.subtraction(1, 2)) 

也不完全确定x>;y:是否是您的意图,或者如果x<;y:

相关问题 更多 >