为什么不super(Thread,self).__ init __()适用于threading.Thread子类?

时间:2010-02-04 05:42:23

标签: python multithreading

我在Python中所知道的每个对象都可以通过调用:

来处理它的基类初始化
super(BaseClass, self).__init__()

threading.Thread的子类似乎不是这种情况,因为如果我在SubClass.__init__()中尝试这样做,我会得到:

RuntimeError: thread.__init__() not called

出现此错误的原因是什么?我查看了threading.Thread的来源,看起来__init__方法应设置为Thread.__initialized = True。我看到所有示例都使用以下__init__

class YourThread(threading.Thread):
    def __init__(self, *args):
        threading.Thread.__init__(self)
        # whatev else

但为什么?

1 个答案:

答案 0 :(得分:41)

这很好用:

>>> class MyThread(threading.Thread):
...   def __init__(self):
...     super(MyThread, self).__init__()

我认为你的代码的错误是你将基础类而不是当前类传递给super - 即你是打电话给super(threading.Thread, ...,这是错的。很难说,因为你没有显示你的失败代码,但这是我从你正在使用的语言中推断出来的! - )