Seite 1 von 1

Fragen zum import Befehl!

Verfasst: Montag 21. Juli 2008, 20:30
von Capucho2002
Hallo an alle Mitglieder des Python-Forums,

hier 2 Fragen eines Programmier als auch Python Neulings. Ich möchte sie anhand eines einfachen (daher sinnfreien)
Beispiels beschreiben.
Ich habe 3 py.-Files.
main.py
Funktionen.py
Variablen.py

Code: Alles auswählen

#------main.py-----
import Variablen as var
import Funktionen as func

print "aus main.py",var.x

#print func.test



#------Funktionen.py-----
import variablen as var

print "aus Funktionen.py",var.x

#test="Hallo"


#------variablen.py-------
#import Funktionen as func 

x=100

#print "aus Variablen.py",func.test

Starte ich nun main.py werden beide print Befehle ausgeführt.
Lösche ich jedoch den Import Befehl in Funktionen.py ist var.x (nameerror) nicht definiert.
Hier meine erste Frage:
Wieso brauche ich in Funktionen.py den 2ten "import variablen as var" befehl? Oder andersrum gefragt, wieso
reicht nicht ein import Befehl aus? Durch Aufrufen von "import Funktionen as func" im main.py rufe ich doch auch den
print befehl in Funktionen.py auf, also doch auch "import variablen as var" aus Funktionen.py, oder nicht?

Hier mein zweite Frage:
Ich entferne die Auskommentierung aus main.py und Funktionen.py. Und starte main.py.
Alle 3 print Ausgaben funktionieren.
Entferne ich jedoch die Auskommentierung in variablen.py kommt folgende Fehlermeldung:
AttributeError: 'module' object has no attribute 'test', wenn ich variablen.py starte.
AttributeError: 'module' object has no attribute 'x, wenn ich main.py starte.

Warum kann ich die Variable test nicht aus variablen.py "printen".
Für eure Erklärung schon mal vielen Dank!

Falls diese Problem schon mal behandelt worden ist, wäre ein Link auf den Beitrag toll. Habe nichts dazu gefunden,
weiss jedoch auch nicht genau nach was ich eigentlich suchen soll!

Gruss

Verfasst: Montag 21. Juli 2008, 20:48
von cofi
Zur 1. Frage: Beim Import wird das ganze Skript abgespult, das heisst, dass Funktionsaufrufe, die im globalen Namespace sind - wie dein `print', direkt ausgeführt werden. Darum benötigt dein `Funktionen.py' auch den Import ;)

Zur 2. Frage: Mit den Fehlermeldungen an sich kann ich nicht viel anfangen bzw sie nachvollziehen, aber ich denke mir es liegt daran, dass die beiden Module sich gegenseitig als Abhängigkeit haben.

Zum Link: Schau dir einfach mal die Doku an ;)

Re: Fragen zum import Befehl!

Verfasst: Dienstag 22. Juli 2008, 05:28
von Zap
Capucho2002 hat geschrieben:Starte ich nun main.py werden beide print Befehle ausgeführt.
Lösche ich jedoch den Import Befehl in Funktionen.py ist var.x (nameerror) nicht definiert.
Hier meine erste Frage:
Wieso brauche ich in Funktionen.py den 2ten "import variablen as var" befehl? Oder andersrum gefragt, wieso
reicht nicht ein import Befehl aus? Durch Aufrufen von "import Funktionen as func" im main.py rufe ich doch auch den
print befehl in Funktionen.py auf, also doch auch "import variablen as var" aus Funktionen.py, oder nicht?
Wie cofi schon richtig sagte wird das Modul Variablen beim import von Funktionen automatisch mit importiert. Man muss dazu noch wissen das man in Python immer an Namspaces gebunden ist die sich auf die Module beziehen. Somit ist var im Namespace von Funktionen.py verfügbar aber nicht im Namespace von main.py.

Beispielsweise würde das hier funktionieren:

Code: Alles auswählen

# ---- main.py ----
print "Var.x ueber Funktion.py:", func.var.x
Capucho2002 hat geschrieben:Warum kann ich die Variable test nicht aus variablen.py "printen".
Für eure Erklärung schon mal vielen Dank!
Das liegt daran das sich die Module gegenseitig importieren.
Wenn sich Module gegenseitig importieren schon vom Gedanken was faul.
Dann hat man eine so starke Bindung das es absolut unsinnig ist diese auf zwei Module aufzuteilen. Dann gehört der Content in ein Modul

Wie cofi schon sagte solltest du besser nochmal die Tutorials und die Doku durcharbeiten. Dann kommt das Verständnis von ganz alleine ;)

Verfasst: Dienstag 22. Juli 2008, 10:23
von Rebecca
Hier ein aehnliches Problem mit Erklaerung: http://www.python-forum.de/topic-15229.html

Danke für eure Hinweise und Tipps!

Verfasst: Freitag 8. August 2008, 15:41
von Capucho2002
Wollte mich nur noch für die Tipps bedanken, haben mich weiter gebracht!
Etwas spät ....

Gruss!