(Gegenseitiges) Import Problem

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.
offi83
User
Beiträge: 1
Registriert: Dienstag 24. Juli 2007, 11:51

(Gegenseitiges) Import Problem

Beitragvon offi83 » Mittwoch 2. Juli 2008, 09:39

Hallo,

habe zwei Module die sich gegenseitig importieren.:

test1.py:

Code: Alles auswählen

from test2 import test2
#import test2

class test1():
   def __init__(self):
      self.tmp1 = 2
      self.tmp2 = 3
   def function1(self):
      print self.tmp1
      _tmp = test2()
      print _tmp.tmp1

def main():
   _tmp=test1()
   _tmp.function1()

if __name__ == '__main__':
   main()


test2.py:

Code: Alles auswählen

from test1 import test1
#import test1

class test2():
   def __init__(self):
      self.tmp1 = 0
      self.tmp2 = 1
   def function1(self):
      print self.tmp1
      _tmp = test1()
      print _tmp.tmp1

def main():
   _tmp=test2()
   _tmp.function1()

if __name__ == '__main__':
   main()


Mit import test1/2 funktioniert alles, mit import test1/2 from test1/2 jedoch nicht (ImportError). Ich möchte aber "import abc from def" nutzen. Gibt es hierfür eine _saubere_ Lösung? :roll:
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Mittwoch 2. Juli 2008, 10:09

Zirkulaere Importe sind generell murks. Entweder du fuegst die beiden Module zu einem zusammen, oder du packst die enstprechenden Teile in ein drittes Modul, welches dann die beiden Module importieren koennen.

Das Problem ist, dass du den Namen test1 aus test1.py importieren moechtest. Also wird das Modul test1.py geladen, doch schon in der ersten Zeile kommt der Befehl, test2 zu importieren, zu der Zeile, in der die Klasse test1 definiert wird, kommt er ja gar nicht, denn jetzt geht das gleiche Spiel mit dem Import des zweiten Moduls los...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
Gromit
User
Beiträge: 51
Registriert: Montag 8. Mai 2006, 19:07

Beitragvon Gromit » Mittwoch 2. Juli 2008, 10:38

Rebecca hat geschrieben:Zirkulaere Importe sind generell murks.

In dieser apodiktischen Kürze kann man das nicht sagen. Generell
sind Module mit wechselseitigen Abhängigkeiten so eng gekoppelt,
daß man den Code besser in ein Modul packt.

Es gibt aber auch Gründe dies nicht zu tun:
  • Man möchte keine zu grossen Module haben (kein guter Grund).
  • Man möchte die Module getrennt bearbeitbar machen (setzt Disziplin voraus)
  • Man möchte nicht portable Teile eines Moduls kapseln. (ein sehr guter Grund)

HTH,
Gerald
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Mittwoch 2. Juli 2008, 11:57

Rebecca hat geschrieben:Das Problem ist, dass du den Namen test1 aus test1.py importieren moechtest. Also wird das Modul test1.py geladen, doch schon in der ersten Zeile kommt der Befehl, test2 zu importieren, zu der Zeile, in der die Klasse test1 definiert wird, kommt er ja gar nicht, denn jetzt geht das gleiche Spiel mit dem Import des zweiten Moduls los...

Wenn du das jeweils andere Modul bei der Klassendefintion nicht brauchst, koenntest du den import-Befehl auch erst danach ausfuehren...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot], Kebap