должен вызывать (Thread .__ init__) в моем переопределенном конструкторе, но почему? - PullRequest
0 голосов
/ 16 мая 2010

я видел эту фразу в python 2.6 man:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}) 
.
.
.

Если подкласс переопределяет конструктор, он должен обязательно вызвать конструктор базового класса (Thread.__init__()), прежде чем делать что-либо еще с потоком,я просто хочу знать почему?

Ответы [ 2 ]

3 голосов
/ 16 мая 2010

Потому что Thread.__init__ устанавливает некоторые внутренние переменные, которые будут неопределенными, если вы пропустите вызов. Как правило, во всех случаях рекомендуется вызывать супер-конструктор, если нет веской причины не делать этого.

2 голосов
/ 16 мая 2010

Если вы хотите знать, «что именно, суперкласс __init__ делает для меня», вы всегда можете изучить источники и посмотреть, например, ...:

    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

точный набор инициализируемых сверхсекретных переменных может, конечно, варьироваться от одной ревизии python к следующей, но, очевидно, всегда будет несколько таких переменных и / или других выполняемых вещей инициализации в базовом классе __init__. Вам нужно знать только все детали для вашей собственной инструкции (вы должны «уважать» слои абстракции, на которых вы хотите программировать, но если вы мудрый и опытный разработчик, тем лучше вы поймете , что это за абстракция слои мудро прячутся, тем больше вы их уважаете; -).

В общем, правило должно быть для каждого __init__ всегда вызывать суперкласс, за исключением только очень специфических случаев (таких как "классы прозрачного смешивания"), и, если вы не знаете, что они, вы, скорее всего, не нужно , чтобы знать). Общее правило всегда гласит: «Инициализация суперкласса может или не может быть важной в этом конкретном выпуске, но это никогда не повредит и часто будет необходимо и / или полезно»! -)

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