出现异常:TypeError start()接受1个位置参数,但在多线程python中提供了2个位置参数

2024-10-03 21:26:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了类webviewThread,在其中我创建了run函数,在其中我传递了两个参数“self,openWhat”,但它在运行时出错。这是我的密码

class webviewThread(Thread):
    def run(self,openWhat):

        if openWhat=="facebook":
            webview.create_window('Facebook', 'http://www.fb.com')
            webview.start()

        elif openWhat=="youtube":
            webview.create_window('Facebook', 'http://www.youtube.com')
            webview.start()

webObj=webviewThread()

def openfacebook():
    webObj.start("facebook")

我正在传递参数的值,但它给出了错误


Tags: runselfcomhttp参数facebookdefwww
1条回答
网友
1楼 · 发布于 2024-10-03 21:26:49

在此行中:

webObj=webviewThread()

您正在为webviewThread类创建一个新的实例。当您在该实例上调用方法(如start())时,self参数(引用实例本身)将自动作为其第一个参数传递给该方法。你知道吗

但是,如果您在类对象本身上调用一个方法,就像您在这里所做的那样:

webviewThread.start()

self将不会被传递,正如错误所示。相反,您需要对创建的webviewThread实例调用方法:

webObj.start()

从您的代码示例中,虽然我没有看到webviewThread类有一个start()方法,所以您可能需要调用webObj.run()

下面是一些解释Python类和self的参考资料。你知道吗

更新:

关于更新后的文章标题中列出的错误:TypeError start() takes 1 positional argument but 2 were given,发生这种情况是因为您正在实例上调用start(),并传递"facebook"参数。由于尚未重写超类Threadstart()方法,因此将调用Threadstart()方法,该方法只接受一个参数:self(传递的是self,在实例上调用该方法时会自动发生,而传递的是"facebook")。你知道吗

相关问题 更多 >