如何修复 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.num1
、self.operator
和self.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()