Почему не супер (Thread, self).__ init __() работает для threading.Thread подкласс?

Каждый объект, который я знаю в 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

Это отлично работает:

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

Я думаю, что ваша ошибка кода заключается в том, что вы передаете класс base, а не класс current, на super - то есть вы вызываете super(threading.Thread, ..., и это просто неправильно. Трудно сказать, так как вы не показываете свой неудачный код, но это то, что я нахожу наклонно от используемого вами языка! -)