为什么在子类化threading.Thread时,super().__ init__不起作用?

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()).

由于groupThread.__init__()方法签名(之后self)中的第一个位置参数,Python将您的剩余self参数应用于group参数,然后也查找显式group=group参数.