【问题标题】:How to fix TypeError: main.__init__() missing 3 required positional arguments: 'num1', 'num2', and 'operator' [closed]如何修复 TypeError:main.__init__() 缺少 3 个必需的位置参数:'num1'、'num2' 和 'operator' [关闭]
【发布时间】:2021-12-15 03:24:30
【问题描述】:
class main:
    def __init__(self, num1, num2, operator):
        self.num1 = float(num1)
        self.operator = operator
        self.num2 = float(num2)

    def mainfunc(self, operator, num1, num2):
        while True:
            if operator == "+":
                return num1+num2
            elif operator == "-":
                return num1-num2
            elif operator == "/":
                return num1/num2
            elif operator == "x" or "*":
                print(int(num1)*int(num2))
                break

p1 = main()
main.mainfunc(num1=input("Choose a number: "),
              num2=input("Choose another number: "),
              operator=input("Choose an operation: "))

我收到了这个错误 TypeError: main.init() 缺少 3 个必需的位置参数:'num1'、'num2' 和 'operator'

【问题讨论】:

  • 你只需要像main(num1=input("Choose a number: "), num2=input("Choose another number: "), operator=input("Choose an operation: "))那样做
  • 您的mainfunc 应该是一个简单的函数,而不是类方法,因为它不使用类的任何属性/方法。
  • 另一个提示,Python 中的类通常是用 PascalCase 编写的,因此您的类更适合命名为Main。而且,类通常用作表示“对象”状态的蓝图,例如,Player 类具有健康、耐力、库存等属性,以及攻击、移动等方法。您的课程所做的只是计算一个算术表达式,正如 Thierry 所提到的,这更适合作为一个简单的函数。

标签: python positional-parameter


【解决方案1】:

欢迎来到精彩的编程世界!

很少有人批评你的代码:

  • p1 = main() 尝试初始化main 的实例,其中__init__ 函数接受3 个参数。您必须做出选择,要么定义无参数构造函数 def __init__(self):,要么像 Ghost Ops 在 cmets 中指出的那样为 init 函数提供参数。
  • 您从不使用main 的属性(即self.num1self.operatorself.num2)。只是失忆了。
  • mainfunc 中的 while True 是不必要的。 operator 不是“运算符”字符之一 (+-/x*),导致无限循环,或者 operator 是该字符之一,并且只进行了一次迭代。
  • 为什么你返回+-/的结果却打印x*的结果?选择一个并坚持下去。
  • 正如 Thierry Lathuille 所指出的,这个 mainfunc 应该是一个简单的函数,并且您的类 main 应该有类似 compute 的方法,它利用类属性并返回结果。
  • 最后,顺便说一句,main 并不是一个好名字,像 Calculator 这样的名字应该更合适。

如果您了解所有这些要点,您将能够轻松地更正您的程序。
祝您学习愉快;)

【讨论】:

    【解决方案2】:

    主类有一个构造函数 init 有 3 个参数,没有任何默认值。您可以使用相同的代码,但只需为构造函数参数提供默认值,它会像一个魅力一样工作。

    def __init__(self, num1=0.0, num2=0.0, operator=None):
        self.num1 = num1
        self.operator = operator
        self.num2 = num2
    

    在调用 mainfun 方法时,您没有使用对象 p1。

    p1 = main()
    p1.mainfunc(num1=input("Choose a number: "),
              num2=input("Choose another number: "),
              operator=input("Choose an operation: "))
    

    【讨论】:

    • 感谢您的建议,终于成功了
    【解决方案3】:
    p1 = main(num1=input("Choose a number: "), 
              num2=input("Choose another number: "),
              operator=input("Choose an operation: ")
         )
    

    您需要在创建对象时定义这些值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 2023-03-27
      • 2022-08-14
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多