Hallo zusammen.
Man kann ja mit dem import Befehl andere python scripts importieren.
Damit kann ich allerdings nur von einer Datei auf die andere zugreifen.
Gibt es eine Möglichkeit wie das in beide Richtungen funktioniert?
Also Datei A ruft definitionen von Datei B auf und umgekehrt.
Python Dateien importieren
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@toper: Das willst Du nicht. Wenn sich Module gegenseitig benötigen, dann sind die so eng verbandelt das es nicht zwei Module sein sollten. Zirkuläre Importabhängigkeiten sind kompliziert und sehr fehleranfällig.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Jein. Zirkulaere importe loesen einen Fehler aus. Und ein solches Design deutet auf ein konzeptionlles Problem hin. Das heisst aber nicht, dass man zwei Module nicht zur Zusammenarbeit bekommt. Man erreicht das, indem es eine gemeinsame Vereinbarung gibt, wie zB Rueckruffunktionen etc, mit denen du dann Code aus dem einen Modul aufrufst, und der ruft dann Code aus dem anderen zurueck.
Was ist das konkrete Problem, das du loesen willst?
Was ist das konkrete Problem, das du loesen willst?
Wenn ich zwei Module a.py und b.py habe, b in a importiere und a in b und anschließend a.py ausführe, geht das ohne Probleme in Python 3.8. Nach dem zweiten Import von a hört die Kette auf. Es gibt also keine endlose Schleife jedoch werden zwei separate Instanzen von a erzeugt und man kann nicht richtig auf b zugreifen. Das soll aber nicht heißen, dass zirkuläre Abhängigkeiten nicht trotzdem schlecht sind.__deets__ hat geschrieben: Dienstag 21. April 2020, 14:32 Jein. Zirkulaere importe loesen einen Fehler aus.

Du hast recht, geht sogar mit 2.7. Es gibt diese Probleme aber, ich habe schliesslich schon genug importe lokal gemacht, um solchen Probleme zu loesen. Aber was da jetzt genau die Umstaende sind, kann ich gar nicht mehr sagen.
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@nezzcarth: Du hast da noch ein weiteres Problem zu ”normalen” zirkulären Importen beschrieben, nämlich wenn eines der beiden Module das Modul ist das als Programm ausgeführt wird. Weil nur dann `a.py` zweimal importiert wird, weil es einmal den Namen `__main__` hat und einmal den Namen `a`.
Davon abgesehen ist der Vorgang an sich recht einfach: Die Module werden einfach Zeile für Zeile ausgeführt, und eben auch die ``import``-Anweisungen.
Oft ist das auch einfach ein Entwurfsproblem und lässt sich durch *drei* Module lösen, nämlich so das Funktionalität die von den beiden ursprünglichen Modulen benötigt wird, in ein (oder mehr) Modul(e) ausgelagert wird.
Davon abgesehen ist der Vorgang an sich recht einfach: Die Module werden einfach Zeile für Zeile ausgeführt, und eben auch die ``import``-Anweisungen.
Oft ist das auch einfach ein Entwurfsproblem und lässt sich durch *drei* Module lösen, nämlich so das Funktionalität die von den beiden ursprünglichen Modulen benötigt wird, in ein (oder mehr) Modul(e) ausgelagert wird.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari