fly*_*yer 2 python multithreading python-2.7
我编写了一个简单的程序来通过子类化来使用线程threading.Thread.但是,如果我用它super()来调用__init__其父类的方法,即threading.Thread我得到了这个错误:
TypeError: __init__() got multiple values for keyword argument 'group'
Run Code Online (Sandbox Code Playgroud)
如果我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()
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 11
你正在传递self第一个参数; 不要这样做.self从参数列表中删除,您的调用将起作用:
super(MyThread, self).__init__(group=group, target=target,
name=name, args=args, kwargs=kwargs,
verbose=verbose)
Run Code Online (Sandbox Code Playgroud)
super()给你一个绑定方法,self已经为你传入(它取自第二个参数super()).
由于group是Thread.__init__()方法签名(之后self)中的第一个位置参数,Python将您的剩余self参数应用于group参数,然后也查找显式group=group参数.
| 归档时间: |
|
| 查看次数: |
1112 次 |
| 最近记录: |