我编写了一个简单的程序,通过继承 threading.Thread
来使用线程。但是如果我使用 super()
调用其父类的 __init__
方法,即 threading.Thread
,我得到这个错误:
TypeError: __init__() got multiple values for keyword argument 'group'
如果我直接使用threading.Thread.__init__()
,那么就没有错误。
我的代码:
class MyThread(threading.Thread):
def __init__(self, group=None, target=None, name=None, args=(),
kwargs=None, verbose=None):
super(MyThread, self).__init__(self, group=group, target=target,
name=name, args=args, kwargs=kwargs,
verbose=verbose)
# threading.Thread.__init__(self, group=group, target=target,
# name=name, args=args, kwargs=kwargs,
# verbose=verbose)
self.args = args
def run(self):
print('a thread %d' % (self.args[0],))
if __name__ == '__main__':
for i in xrange(5):
thread = MyThread(args=(i,))
thread.start()
最佳答案
您正在为第一个参数传递 self
;不要这样做。从参数列表中删除 self
,您的调用将起作用:
super(MyThread, self).__init__(group=group, target=target,
name=name, args=args, kwargs=kwargs,
verbose=verbose)
super()
给你一个 bound 方法,self
已经为你传入(它取自第二个参数super()
).
由于 group
是 Thread.__init__()
方法签名中的第一个位置参数(在 self
之后),Python 正在应用您的剩余self
参数传递给 group
参数,然后找到一个明确的 group=group
参数。
关于python - 为什么 super().__init__ 在子类化 threading.Thread 时不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20562842/