我的课堂上有个叫做“互动”的方法:
class Interaction:
def PreparaThreadBrowser(self, User, Password):
t = ThreadBrowser(args=(User, Password), )
t.start()
以“用户”和“通过”为参数的线程。
然后,使用该“运行”方法创建名为“ ThreadBrowser”的类:
class ThreadBrowser(threading.Thread):
def run (self, user, password):
self.User = user
self.Pass = password
print(self.User, self.Pass)
但是事实证明,我确实在将参数发送给线程函数方面很费力,因为它会产生执行错误:
TypeError: run() missing 2 required positional arguments: 'user' and 'password'
有什么办法解决这个问题吗?
答案 0 :(得分:2)
args
构造函数参数不能为run
提供附加参数。它提供了您未指定的 target 参数。具体来说:
run()
的默认实现调用self.target(*self._args, **self._kwargs)
,其中_args
和_kwargs
由构造函数提供,分别默认为空元组和dict。 / p>
通过实现run
,您选择不使用Python自动调用target(*args)
。然后,由您的代码来存储您的run
将会接管的状态。惯用选项是将其存储在构造函数中,就像您的run
方法现在所做的那样。
例如:
class ThreadBrowser(threading.Thread):
def __init__(self, user, password):
super(ThreadBrowser, self).__init__()
self.User = user
self.Pass = password
def run(self):
print(self.User, self.Pass)
然后ThreadBrowser
可以自然地构建为ThreadBrowser(username, password)
,并像以前一样以t.start()
开头。
答案 1 :(得分:0)
运行需要2个参数的用户,通过
import threading
class Interaction:
def PreparaThreadBrowser(self, User, Password):
t = ThreadBrowser(args=(User, Pass), )
t.start()
class ThreadBrowser(threading.Thread):
def run (self, user, password):
self.User = user
self.Pass = password
print(self.User, self.Pass)
t = ThreadBrowser()
t.run("user", "pass")