Import aus 2 Modulen

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
carsten123
User
Beiträge: 3
Registriert: Montag 9. Juni 2008, 14:37

Allseits ein Hallo!

Ich habe ein Problem mit dem Import von Python Modulen.
Folgenden Konstellation:
-----------------------------
Datei1.py:
def func1():
func2()
-----------------------------
Datei2.py
def func2():
print "Hello World"
------------------------------
Programm.py

from Datei2 import *
from Datei1 import *

func1()

--------------------------
=> Resultiert in der Meldung das func2() im globalen Namensraum nicht gefunden wurde. Ich könnte Datei1 um die Zeile
from Datei2.py import * ergänzen, jedoch löst das mein Problem nicht, da bei mir Datei1 von einem/mehreren Skripten generiert wird und ich nur Programm.py und Datei2.py mit den entsprechenden Funktionskörpern definieren kann.

Kann mir jemand sagen wie ich dieses Problem löse?

Viele Grüße

Carsten
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo Carsen, willkommen im Forum,
carsten123 hat geschrieben:Kann mir jemand sagen wie ich dieses Problem löse?
Indem du Stern-Imports sein lässt. Diese Imports schaffen mehr Probleme als nutzen und werden allgemein als schlechter stil angesehen. Importiere entweder einzelne Namen oder das gesamte Modul.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Moin,

du rufst in Datei1 eine Funktion aus Datei2 auf, aber du importierst sie dort nicht. Deswegen kann er sie auch nicht finden.

Gruß,
Manuel
carsten123
User
Beiträge: 3
Registriert: Montag 9. Juni 2008, 14:37

Ich hätte vermutet, das sowohl func1() als auch func2() im globalen Namesraum vorliegen und somit verwendet werden können.

Wie gesagt kann ich Datei1 nicht editieren, daher suche ich eine andere Möglichkeit.

@Leonidas:
Danke für die Begrüßung. Ich weiss das Sternchenimporte ungerne gesehen werden, aber mit
import Datei1

Datei1.func1() kann ich mein Problem auch nicht lösen :(
BlackJack

"Globaler Namensraum" heisst in der Regel Modulglobal. *Wirklich* global will man solche Funktionen in der Regel auch nicht haben.

Was hat sich der Autor von `Datei1.py` denn dabei gedacht eine Funktion auf zu rufen, die es gar nicht gibt, und Dir dann zu verbieten die Datei zu ändern!?
carsten123
User
Beiträge: 3
Registriert: Montag 9. Juni 2008, 14:37

Der Autor von Datei1 ist ein Parsergenerator.

In der Grammatik gibt es dann Regeln wie:

rule Hello1234: Bedingung1234 {{ Funktion1234 }}

Funktion1234 kann ich nun im generierten *.py File definieren. Da ich aber die Grammatik etwa 10 mal am Tag ändere (Test/neue Funktionen etc), ist es unpraktisch die Funtkionsdefinitionen immer wieder hinzuzufügen. Also suche ich eine andere Variante.
BlackJack

Der Parsergenerator erlaubt es nicht Importe an zu geben, die in die generierte Datei geschrieben werden?

Wenn ein Parsergenerator keine Möglichkeit bietet, die Ausgabe zu verwenden, ohne sie manuell bearbeiten zu müssen, würde ich mich nach einem anderen Parsergenerator um sehen.
Antworten