Почему super (Thread, self) .__ init __ () не работает для подклассов Threading .Thread? - PullRequest
15 голосов
/ 04 февраля 2010

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

42 голосов
/ 04 февраля 2010

Это прекрасно работает:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...