4

我对 Python 很陌生,并且正在研究通过这篇文章对某些代码使用线程: Python - 使用线程或队列迭代调用函数的 for 循环

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

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(Test, self).__init__( **kwargs)通话有关,但我不确定如何解决它。我的目标是传递大量的论点,这就是我**kwargs开始使用的原因。

4

2 回答 2

2

您将参数 A 和 B 传递给不需要它们的 Thread 构造函数。可能您应该只调用不带参数的超级构造函数。

于 2013-02-25T12:58:18.857 回答
0

threading.Thread.__init__期望(最多)group, target, name, args,kwargsverbose关键字参数。

由于您有大量额外的参数(可能超过threading.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那么将不会设置by 使用的一大堆属性:

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

我不认为这是你想要发生的...

于 2013-02-25T12:58:23.397 回答