Seite 1 von 1

(Gegenseitiges) Import Problem

Verfasst: Mittwoch 2. Juli 2008, 09:39
von offi83
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:

Verfasst: Mittwoch 2. Juli 2008, 10:09
von Rebecca
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...

Verfasst: Mittwoch 2. Juli 2008, 10:38
von Gromit
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

Verfasst: Mittwoch 2. Juli 2008, 11:57
von Rebecca
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...