python – 将带有** kwargs错误的值线程化并传递给TypeError

我是
Python的新手,并且正在考虑通过这篇文章为某些代码使用线程:

Python – Using threads or a queue to iterate over a for loop that calls a function

我想知道为什么这个简单的示例代码错误

Error: line 1: TypeError: file <maya console> line 4: __init__() got
an unexpected keyword argument 'A' #

我的代码:

import threading
class Test(threading.Thread):
    def __init__(self, **kwargs):
        super(Test, self).__init__( **kwargs)
        self.__dict__.update(**kwargs)

A = None
B = 1   
test = Test(A = A, B = B)
print test.A
print test.B

我的假设是它与super(测试,自我).__ init __(** kwargs)调用有关,但我不确定如何解决它.我的目标是传递相当多的论据,这就是我开始使用** kwargs的原因.

最佳答案 threading.Thread .__ init__期望(最多)group,target,name,args,kwargs和verbose关键字参数.

因为你有大量额外的参数(大概超过了六个线程.Thread .__ init__期望),那么
明确提取这六个并处理其余部分可能不那么重要

self.__dict__.update(**kwargs)
import threading

class Test(threading.Thread):
    def __init__(self, **kwargs):
        super(Test, self).__init__(
            **{k: v for k in 'group target name args kwargs verbose'.split()
               if k in kwargs})
        self.__dict__.update(**kwargs)

A = None
B = 1
test = Test(A=A, B=B)
print test.A
print test.B

注意,如果你在没有参数的情况下调用__init__:

super(Test, self).__init__()

那么threading.Thread使用的一大堆属性将不会被设置:

class Thread(_Verbose):    
    def __init__(self, group=None, target=None, name=None,
                 args=(), kwargs=None, verbose=None):
        assert group is None, "group argument must be None for now"
        _Verbose.__init__(self, verbose)
        if kwargs is None:
            kwargs = {}
        self.__target = target
        self.__name = str(name or _newname())
        self.__args = args
        self.__kwargs = kwargs
        self.__daemonic = self._set_daemon()
        self.__ident = None
        self.__started = Event()
        self.__stopped = False
        self.__block = Condition(Lock())
        self.__initialized = True
        # sys.stderr is not stored in the class like
        # sys.exc_info since it can be changed between instances
        self.__stderr = _sys.stderr

我不认为这就是你想要发生的事情……

点赞