【问题标题】:Missing 1 required positional argument: 'y'缺少 1 个必需的位置参数:'y'
【发布时间】:2020-11-15 00:41:16
【问题描述】:

我创建了一个 Python 类:

class calculator:
    
    def addition(self,x,y):
        added = x + y
        print(added)
        
    def subtraction(self,x,y):
        sub = x - y
        print(sub)

    def multiplication(self,x,y):
        mult = x * y
        print(mult)

    def division(self,x,y):
        div = x / y
        print(div)

现在当我这样调用函数时:

calculator.addition(2,3)

我收到一个错误:

addition() 缺少 1 个必需的位置参数:'y'

有什么问题?有什么解决方案可以让我像addition(2,3) 这样称呼它?

【问题讨论】:

标签: python python-3.x


【解决方案1】:

Python 的类有三种方法:

  1. 实例方法

实例方法必须将实例对象作为第一个参数传递给方法,即self,如:

class calculator:
    
    def addition(self, x, y):
        added = x + y
        print(added)

c = calculator()        
c.addition(2, 3)
  1. 类方法

类方法使用classmethod装饰器,必须将类对象作为第一个参数传递给方法,即cls,如:

class calculator:
    
    @classmethod
    def addition(cls, x, y):
        added = x + y
        print(added)
    
calculator.addition(2, 3)
  1. 静态方法

静态方法没关系,加个staticmethod装饰器就好了,比如:

class calculator:
    
    @staticmethod
    def addition(x, y):
        added = x + y
        print(added)
    
calculator.addition(2, 3)

因此,如果您只想使用 calculator.addition(2, 3) 之类的类对象进行调用,那么最后两种方法可能是您的答案。

【讨论】:

  • 感谢您的解释。您的解决方案消除了我对类方法和静态方法的怀疑。
  • @FarazKhan 没问题 :)
【解决方案2】:

您必须通过实际声明此类的实例来传递self 变量,如下所示:

myCalculator = calculator()

myCalculator.addition(2,3)

输出应该是:5

【讨论】:

    【解决方案3】:

    请先创建类的实例:

    calculator_instance = calculator()
    

    然后,您可以将函数调用为calculator_instance.addition(2,3)

    【讨论】:

      【解决方案4】:
      1. 您应该为您的班级使用名称“计算器”
      2. 当您调用函数 Caculator.addition 时,您需要 3 个 args (self, x, y),但您提供了 2 个
      3. 您应该编写函数 «addition(self,x,y):» 像这样 «addition(self, x: int, y: int):»

      如果你只想添加函数,不要把它写成类方法,而是写成函数。 如果你需要写 «calculator.addition(2,3)» 首先做calculator = Calculator()

      【讨论】:

        【解决方案5】:

        你只需要删除自我。当你有 __init __ 函数时将使用 self

        class calculator:
            
            def addition(x,y):
                added = x + y
                print(added)
                
            def subtraction(x,y):
                sub = x - y
                print(sub)
        
            def multiplication(x,y):
                mult = x * y
                print(mult)
        
            def division(x,y):
                div = x / y
                print(div)
        
        calculator.addition(2,3)
        

        【讨论】:

          猜你喜欢
          • 2017-05-28
          • 2020-01-06
          • 2021-10-19
          • 1970-01-01
          • 2020-10-12
          • 2022-01-18
          • 2019-06-07
          • 2019-02-04
          • 1970-01-01
          相关资源
          最近更新 更多