5 Stimmen

Wie kann man in Python am besten mit dem Importzyklus umgehen?

In unseren Projekten haben wir die Ebene 'Kontrollen' mit den folgenden Modulen: 'grid', 'gridcell', 'combo' usw. Das Grid-Modul importiert das Gridcell-Modul, da das Grid aus Zellen besteht, während jede Zelle eine Combo enthalten kann. Wir beginnen also mit der Verwendung von 'from ... import ...'-Anweisungen innerhalb dieser Klassen auf folgende Weise:

#grid.py
from controls.gridcell import cell
#gridcell.py
from controls.combo import combo

Aber das war in Ordnung, bis wir anfingen, das Raster als Kombinationsinhalt zu verwenden. Sobald wir damit beginnen, mussten wir die Anweisung "from grid import grid" in die Datei "combo.py" einfügen. Nachdem wir dies getan haben, erhalten wir eine Import-Ausnahme:

from controls.gridcell import gridcell 
ImportError: Cannot import name gridcell 

BEARBEITET:

Ich habe auch 'importieren ... als ...' versucht und erhalte folgende Fehlermeldung:

import controls.gridcell as gridcell
AttributeError: 'module' object has no attribute 'gridcell'

Ich habe mehrere Artikel gelesen, und alles, was ich über die Lösung dieses Problems gefunden habe, ist die Verwendung der Anweisung "import" ohne "from", z. B:

#grid.py
import controls.gridcell
#gridcell.py
import controls.combo
#combo.py
import controls.grid

Dies führt jedoch dazu, dass wir vollständige Namen wie "controls.gridcell.cell", "controls.combo.combo", "controls.grid.grid" und so weiter verwenden.

Also meine Frage ist - Gibt es eine andere Möglichkeit, wie dies zu tun (so wäre es verfügbar sein, um kürzere Namen zu verwenden) oder dies ist der einzige Weg, wie man dieses Problem zu lösen?

Entschuldigung, wenn ich etwas vermisse

Vielen Dank an alle

9voto

import controls.gridcell as gridcell

usw. usw. usw. usw.

4voto

Guy Punkte 13278

Können Sie die Importe auch in die Funktionen verschieben.

def foo():
    from controls.gridcell import cell
    from controls.combo import combo

wenn Sie eine init() Funktion kann dies praktisch sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X