2016-06-17 4 views
0

Mein Verständnis dieser Methoden sind:Methode vs __init__ in einer Python-Klasse

  • __init__() wie Konstruktor ist.
  • run() wird aufgerufen, wenn ein Thread für diese Klasse gestartet wird.

Aber warum brauchen wir eine Run-Methode? Könnten wir ein Objekt der Klasse instanziiert haben und alle Initialisierungen bleiben in __init__()?

Ich bin durch this article gegangen, konnte nicht viel daraus machen Können Sie bitte einige Erkenntnisse dazu teilen?

+0

Um die Initialisierung (die für jede Instanz auftritt) von Code zu unterscheiden, der in einem separaten Thread ausgeführt werden soll (der in die run-Methode übernommen wird). – pvg

+0

Danke allen !! Also __init__ ist für die Initialisierung und wird im Hauptthread ausgeführt, wobei die run-Methode über die gesamte Lebensdauer des untergeordneten Threads verfügbar ist. – prat

+0

Nein, sie sind beide nur Methoden. __init__ ist eine "magische Methode" zur Initialisierung von Instanzen. Das Python-Threading-Modul kann Ihre run-Methode (aber auch jede andere Methode) aufrufen, wenn es einen neuen Thread instanziiert. – pvg

Antwort

1

Ich denke, das Python-Threading-Modul bietet ein gutes Beispiel. Was wäre, wenn Sie eine abgeleitete Thread-Klasse hätten, die immer die gleiche Funktion hätte, aber vielleicht möchten Sie ihr verschiedene Eingaben geben? Möglicherweise möchten Sie viele Objekte der Klasse instanziieren, aber mit unterschiedlichen Eingaben - und Sie möchten nicht, dass sie noch läuft.

Vielleicht möchten Sie diese Liste von instanziierten (aber nicht gestarteten) Threads an irgendeine Art von Manager übergeben, der sie startet und überwacht, unabhängig davon, um welche Art von Thread es sich handelt.

In diesem Fall ist es gut, die Erstellung vom Lauf zu trennen.

1

__init__ wird einmal ausgeführt (wenn das Objekt erstellt wird), während run (in dem von Ihnen angegebenen Beispiel) im Hintergrund ausgeführt wird (ein anderer Prozess), solange das Objekt existiert.

Der einzige Unterschied zwischen __init__ und run sind, dass die ersten Durchgänge in dem Haupt-Thread, während des zweiten Durchlaufs in einem anderen Thread.

Aber warum brauchen wir eine Run-Methode? wir können ein Objekt der Klasse instansiert haben und alle Initialisierungen bleiben in__init__?

Tatsächlich sind alle Inialisierungen bereits in __init__. Die Methode run in diesem Beispiel zeigt nur einen Hintergrundthread und ist nicht erforderlich.

0

Sie sind korrekt über __init__() als Konstruktor. In diesem Beispiel besteht das Ziel darin, eine Funktion, die run()-Funktion, in einem Thread auszuführen. Das Beispiel bietet eine saubere Möglichkeit, dies zu tun. Sie können den Code innerhalb der run() Funktion innerhalb der __init__() nicht ausführen, da dies keinen neuen Thread hervorbringen würde.

Betrachten wir den Fall:

example = ThreadingExample() 
do_something_important_that_doesnt_want_to_wait() 

Dies funktioniert mit dem Beispielcode.