我编写了一个简单的程序,通过继承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()
答案 0 :(得分:11)
您正在传递self
第一个参数;不要这样做。从参数列表中删除self
,您的调用将起作用:
super(MyThread, self).__init__(group=group, target=target,
name=name, args=args, kwargs=kwargs,
verbose=verbose)
super()
为您提供了一个绑定方法,self
已经为您传入(它是从第二个参数转移到super()
)。< / p>
由于group
是Thread.__init__()
方法签名中的第一个位置参数(self
之后),因此Python将您的剩余self
参数应用于group
参数,然后查找显式的group=group
参数。