2009-05-02 11 views
0

Derzeit versuche ich meine erste Python-Bibliothek zu schreiben, und ich habe folgendes Problem aufgetreten:Python Importe aus crossreferencing Paketen

Ich habe folgenden Import in meinem Paket myapp.factories:

from myapp.models import * 

und folgende Unterlagen in meinem Paket myapp.models:

from myapp.factories import * 

ich brauche die Modelle in meinen Fabriken Paket aber ein Modell innerhalb ich einer der Fabriken auch benötigen. Wenn ich nun den Code aufrufen, die Fabrik benötigt ich die folgende Fehlermeldung erhalten:

NameError: global name 'MyModelFactory' is not defined 

Ich bin ziemlich sicher, es hat etwas mit dem zu tun hat, in dem die Skripte geladen werden, aber ich kann nicht zu Figur scheinen herauszufinden, wie diese Querverweise funktionieren können.

Antwort

5

„innerhalb eines Modells ich brauche auch eine der Fabriken“ - genau das Werk importieren, wo Sie es brauchen:

class SomeModel: 
    def some_method(self): 
     from myapp.factories import SomeFactory 
     SomeFactory().do_something() 
+1

Rund Abhängigkeiten sind die Gruben, in jeder Sprache und viele Nicht-Sprache Kontexten; Dieses einfache Refactoring ist eine Möglichkeit, dieses zirkuläre Dep zu entfernen, aber ich würde auch ein breiteres und tieferes Überdenken der Gesamtarchitektur empfehlen - kreisförmige Deps sind ein "schlechter Architekturgeruch" und sie sollten als Anhaltspunkte dafür genommen werden, das große Bild zu überdenken, MEINER BESCHEIDENEN MEINUNG NACH. –

Verwandte Themen