Python Dateien importieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
toper
User
Beiträge: 74
Registriert: Freitag 13. April 2018, 14:37

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.
Benutzeravatar
__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
toper
User
Beiträge: 74
Registriert: Freitag 13. April 2018, 14:37

Ok, ich dachte da gäbe es eine einfache Möglichkeit.
Aber trotzdem danke für die Hilfe
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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?
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

__deets__ hat geschrieben: Dienstag 21. April 2020, 14:32 Jein. Zirkulaere importe loesen einen Fehler aus.
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__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
__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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten