2016-05-24 13 views
1

importieren habe ich ein Projekt mit einer Dateistruktur wie dieseein zweites Mal innerhalb einer Klasse Instanz

main.py 
input/ 
    __init__.py 
    foo.py 

Innenhaupt eine Instanz davon mit diesen Zeilen I Foo importieren und erstellen:

main. py

from input.foo import Foo 
foo = Foo() 

Innen foo.py muss ich Threading verwenden, damit ich importieren und erstellen sie einen Thread in init.

foo.py

from threading import Thread 

class Foo 
    def __init__(self): 
     newThread = Thread() 

Später habe ich beschlossen, es wäre nützlich, einen Thread in main.py zu haben, so mit from threading import Thread ich es auch dort importiert. Bis jetzt hat alles so funktioniert wie es sollte. Ich dachte, es sei überflüssig, während der Ausführung zweimal Thread zu importieren, also entfernte ich die oberste Zeile von foo.py und führte es erneut aus. Dieses Mal bekam ich NameError: global name 'Thread' is not defined, als das Programm die Linie newThread = Thread() erreichte.

Gibt es einen Weg für mich, einen Import in main.py und nicht importieren Sie es erneut in foo.py? Es fühlt sich falsch an, dieselbe Klasse zweimal in einem Programm zu importieren.

+0

"Es fühlt sich falsch an, die gleiche Klasse zweimal in einem Programm zu importieren." - Warum? Es ist völlig normal. Es wird nicht zu doppelten Initialisierungsproblemen führen, und Python selbst macht es mehrmals, bevor der Code überhaupt ausgeführt wird. – user2357112

+0

Technisch ja, Sie könnten "Thread" an den Initialisierer von 'Foo' übergeben, aber es ist wirklich nicht falsch, das Modul einmal pro Datei zu importieren. – L3viathan

Antwort

3

Ja, Sie sollten alle Importe und Abhängigkeiten am Anfang aller Ihrer Module platzieren, auch wenn andere Module die gleichen Abhängigkeiten haben. Importe in Python existieren nur im Rahmen dieses Moduls. Obwohl die import-Anweisung zweimal vorhanden ist, ist Python intelligent genug, um zu wissen, dass es bereits importiert wurde und das Modul nicht erneut importieren muss.

Verwandte Themen