【问题标题】:Function missing 1 required positional argument [duplicate]函数缺少 1 个必需的位置参数 [重复]
【发布时间】:2023-04-01 11:30:01
【问题描述】:

我收到此错误:

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)

【问题讨论】:

  • first = calculator()替换first = calculator
  • 您不需要x, yadditionsubtraction。你不使用它们。

标签: python python-3.x


【解决方案1】:

您无需在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)

【讨论】:

    【解决方案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: 是你的意图还是你真的想要 if x

    【讨论】:

      【解决方案3】:

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

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

      希望对您有所帮助。

      【讨论】:

        【解决方案4】:

        如前所述,如果您已经在 __init__ 中收集了这些信息,则不必在 additionsubtraction 函数中包含参数> 功能。

        像这样:

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

        或者,如果您确实希望在 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))
        

        单个函数的参数用于代替给类对象的参数。

        无论哪种方式都有效,这取决于您希望如何使用该类。

        【讨论】:

          猜你喜欢
          • 2019-01-02
          • 1970-01-01
          • 2021-09-10
          • 1970-01-01
          • 2014-09-13
          • 1970-01-01
          • 1970-01-01
          • 2018-06-04
          相关资源
          最近更新 更多