如何修复 TypeError:main.__init__() 缺少 3 个必需的位置参数:'num1'、'num2' 和 'operator' [关闭]

Posted

技术标签:

【中文标题】如何修复 TypeError:main.__init__() 缺少 3 个必需的位置参数:\'num1\'、\'num2\' 和 \'operator\' [关闭]【英文标题】: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 所提到的,这更适合作为一个简单的函数。 【参考方案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: ")
     )

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

【讨论】:

以上是关于如何修复 TypeError:main.__init__() 缺少 3 个必需的位置参数:'num1'、'num2' 和 'operator' [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在本机反应中修复“TypeError:未定义不是对象(评估'_reactNativeCamera.default.constants')”错误?

如何修复TypeError:application_module__WEBPACK_IMPORTED_MODULE_1 ___ default.a不是构造函数

Linux 升级后如何修复“TypeError:navigationToolbar2QT.message[str] 和 _show_message() 之间的连接()失败”?

如何修复 - 没有这样的表:main.auth_user__old

使用 xlsxwriter 将自定义类类型数据写入 excel TypeError: Unsupported type <class '__main__.node'> in write()

如何修复相对导入错误:“没有已知的父包”?