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

时间:2018-07-06 18:47:38

标签: python python-3.x

我遇到此错误:

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)

5 个答案:

答案 0 :(得分:2)

或者,您可以执行以下操作:

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

答案 1 :(得分:1)

您无需在xy中指定subtractionaddition

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)

答案 2 :(得分:1)

如前所述,如果您已经在 __ init __ 加法减法中包含参数。 >功能。

像这样:

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())

或者,如果您要做要在添加中包含 x y 个参数减法功能,您可以这样调整代码:

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))

使用单个函数的参数代替提供给类对象的参数。

无论哪种方法,都取决于您要如何使用该类。

答案 3 :(得分:0)

问题在于此时创建对象:

first = calculator

这里您不是要创建“计算器”对象,而是要在“第一个”变量中复制计算器。 如果您有一个类而不是一个对象,则不能直接调用其方法,但应将“ self”自变量添加为该类的实例。

要解决此问题,必须在类后添加带有两个参数“ x”和“ y”的方括号来创建对象的实例...

first = calculator(5, 4)  # These numbers are only an example, change them as you wish

答案 4 :(得分:0)

first = calculator使first引用该类。但是first = calculator(1, 2)使first成为类calculator的对象。这会为self上调用的所有其他函数初始化first。这也设置了self.xself.y的值,因为__init__在对象创建后即被调用。因此,当使用first = calculator(x, y)时,selfself.xself.y一起具有值,并且当不使用括号时,它们没有值。这会导致缺少参数错误。

接下来,正如其他人已经提到的那样,一旦调用__init__,就会为该对象初始化x和y。因此,在声明其他功能时不需要它们。 self.xself.y可以在那里直接使用,在这种情况下,现在分别指1和2。

希望有帮助。

相关问题