Import eines Moduls das selbst Module benötigt

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
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Wahrscheinlich eine Standardfrage, aber Ich sehe es nicht explizit z.B. in http://docs.python.org/tutorial/modules.html

Werden die Module aus __main__ 'vererbt', oder müssen sie sich quasi untereinander auch importieren?
Bsp.:
main.py:

Code: Alles auswählen

import sys
from meinmodul import *
hallo()
meinmodul.py:

Code: Alles auswählen

def hallo():
    sys.stdout.write('hi')
Das gibt nämlich leider einen NameError.
Das vermutlich erforderliche Kreuz-und-Quer-Importieren ist dann aber wieder etwas unübersichtlich. Muss ich wohl noch weiter abstrahieren ;-)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Module sind abgeschlossene Programmteile, es wird nichts wild hin und her importiert und schon gar nicht implizit.
Importiert man ein Modul, hat man Zugriff auf dessen Namen, das schliesst auch dessen Importe ein. D.h.

Code: Alles auswählen

import main
print main.sys.argv
funktioniert. Aber nicht umgekehrt und wie gesagt nicht ohne eine explizite Anweisung.

Das ganze ist aber auch eine Stilfrage. Naja eigentlich sogar mehr, denn du baust implizite Abhaengigkeiten ein. Importiere ausdruecklich, was das Modul braucht und du machst das Verstaendnis fuer jeden Leser einfacher.

Bei Gelegenheit mal:

Code: Alles auswählen

python -c 'import this'
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Ich versteh's nicht.

Angenommen, ich will meine unlesbar lange main teilweise aufteilen in config und functions.
in config sei z.B. path="dir/subdir/"
in main rufe ich eine funktion aus functions auf, die path benötigt.

Wie geht das ?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

import config
import functions
functions.func(config.path)
Brauchst du die Konfiguration direkt in `functions`, dann importierst du `config` halt.
BlackJack

@whaeva: Dann holst Du Dir in der `main()` das `path` aus `config` und übergibst das der Funtkion aus `functions`. Wo ist das Problem?
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

OK, also alles als Parameter übergeben! Danke!
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Da kommt man ja gar nicht zum Programmieren:
in main habe ich ein try...except functions.func(param)
-> NameError: name functions is not defined.

Wär nett wenn ihr mir auch da auf die Sprünge helft :-)
[Erledigt, mein Fehler. Oh je! Namen zu ähnlich..]
Zuletzt geändert von whaeva am Dienstag 25. August 2009, 09:54, insgesamt 1-mal geändert.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

whaeva hat geschrieben:Da kommt man ja gar nicht zum Programmieren:
Doch, doch. Du merkst nur langsam was Programmieren heißt. Wenn man nicht rein Code nach Vorgabe irgendwo hinschreibt, dann muss man sich die Vorgabe nämlich selber machen. Das heißt, dass du die Struktur deiner zu schreibenden Software vor dem Codieren planen solltest.
whaeva hat geschrieben:in main habe ich ein try...except functions.func(param)
-> NameError: name functions is not defined.
Dein angegebenes Codefragment will sich mir nicht so recht erschließen. Ich versuche mal einen Tipp ins Blaue hinein zu geben: Hast du functions denn auch importiert?

Gruß,
Matthias
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Ja, importiert wie oben.. Habe den falschen Namen benutzt...
Antworten