Fragen zum import Befehl!

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
Capucho2002
User
Beiträge: 5
Registriert: Mittwoch 30. Januar 2008, 16:57

Montag 21. Juli 2008, 20:30

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
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Montag 21. Juli 2008, 20:48

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 ;)
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Dienstag 22. Juli 2008, 05:28

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 ;)
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 22. Juli 2008, 10:23

Hier ein aehnliches Problem mit Erklaerung: http://www.python-forum.de/topic-15229.html
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Capucho2002
User
Beiträge: 5
Registriert: Mittwoch 30. Januar 2008, 16:57

Freitag 8. August 2008, 15:41

Wollte mich nur noch für die Tipps bedanken, haben mich weiter gebracht!
Etwas spät ....

Gruss!
Antworten