Почему не супер (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, ...
, и это просто неправильно. Трудно сказать, так как вы не показываете свой неудачный код, но это то, что я нахожу наклонно от используемого вами языка! -)