2016-06-17 4 views
0

Моего понимания этих методов являются:метода против __init__ в классе питона

  • __init__(), как конструктор.
  • run() вызывается, когда начинается поток для этого класса.

Но зачем нам нужен метод запуска? Можем ли мы создать экземпляр объекта класса, и все инициализации остаются в __init__()?

Я прошел через this article, не смог сделать много из этого Можете ли вы поделиться некоторыми сведениями об этом?

+0

Чтобы отличить инициализацию (что происходит для любого экземпляра), и код, который вы хотите запустить в отдельном потоке (который входит в метод запуска). – pvg

+0

Спасибо всем! Таким образом, __init__ инициализируется и запускается в основном потоке ... где, поскольку метод run доступен через жизненный цикл дочернего потока. – prat

+0

Нет, они оба - просто методы. __init__ - это «магический метод», например, инициализация. Модуль Threading Python может вызывать ваш метод run (но и любой другой), когда он создает новый поток. – pvg

ответ

1

Я думаю, что наглядный пример Python-потокового модуля. Что делать, если у вас есть производный класс потоков, который всегда выполняет ту же функцию, но, возможно, вы хотите дать ему разные входы. Возможно, вы захотите создать экземпляр множества объектов класса, но с разными входами, и вы не хотите, чтобы он начал работать.

Возможно, вы хотите передать этот список экземпляров (но не начатых) для какого-то менеджера, который запускает и контролирует их независимо от того, какой поток они являются.

В этом случае хорошо отделить создание от пробега.

1

__init__ запускается один раз (когда объект сконструирован), а run (в примере, который вы указали) работает в фоновом режиме (в другом процессе) до тех пор, пока объект существует.

Единственная разница между __init__ и run заключается в том, что первый пробег в основном потоке, а второй - в другом потоке.

Но зачем нам нужен метод запуска? мы могли бы создать объект класса, и все инициализации останутся в _init__?

Фактически, все инициализации уже находятся в __init__. Метод run в этом примере просто демонстрирует фоновый поток и не нужен.

0

Вы в точности являетесь конструктором __init__(). В этом примере целью является запуск функции, функции run(), в потоке. Этот пример обеспечивает чистый способ сделать это. Вы не можете запустить код внутри функции run() внутри __init__(), так как это не вызовет новый поток.

Рассмотрим случай:

example = ThreadingExample() 
do_something_important_that_doesnt_want_to_wait() 

Это работает с примерами кода.

Смежные вопросы