Seite 1 von 1

[gelöst] Importfunktion

Verfasst: Freitag 21. November 2008, 06:50
von mathi
Hallo,

mein Programm wird mittlerweile so groß, dass ich es in versch. Dateien aufteile.

Im hauptprogramm importiere ich den ausgelagerten Code. In der ausgelagerten Codedatei muß ich aber Methoden und Funktionen wie wx , re und math noch einmal importieren.

Warum ist es nicht möglich, NUR im Hauptprogrammteil, der ja die ausgelagerten Teile aufruft, die benötigten Dinge zu importieren?

Strukturbeispiel:

Hauptprogramm:

Code: Alles auswählen

import wx,re,math
import nebenprogramm

# hier ist der Code des Hauptprogrammes
# es wird wx, re, math benötigt
importcode=nebenprogramm.classe()

Nebenprogramm:

Code: Alles auswählen

import wx,re,math

#hier ist der Code des Nebenprogrammes
# es wird wx,re, math benötigt

Das ganze ist dann doppelt importiert oder??

Gruß Mathi

Verfasst: Freitag 21. November 2008, 08:05
von Zap
Dadurch das du es einmal import hast wird es in die sys.modules eingetragen.
Ein weiterer import ist lediglich das Holen des Namens in den Namespace des Submodules und somit absolut nichts Zeitkritisches da es kein neuer Import im eigentlichen Sinne ist.

Sieh es von der Positiven Seite.
Wenn du ein Submodule in seiner Funktionalität unabhägig implementierst ist dessen Wiederverwendbarkeit sofort gegeben da es genau weiß was es alles an Modulen benötigt.
Somit ist es leicht ein solches Module in anderen Projekten wiederzuverwenden.

Verfasst: Freitag 21. November 2008, 08:10
von bwbg
Hallo mathi,

folgender Gedankengang: Du stellst fest, dass dein ausgelagerter Code (Modul) sich wunderbar für ein anderes deiner Programme eignet. Dein Hauptprogramm importiert wx, re und math in diesem Fall aber nicht (und sind nach deiner Überlegung auch nicht im Modul importiert). Und schon hakts.

Grundsätzlich sollte ein Modul alle weiteren Module importieren, die es für (und nur für) seine Aufgaben benötigt.

In einer Auslagerung, in der du zum Beispiel nur Berechnungen durchführst sind wx und re vollkommen überflüssig, math (sofern wirklich benötigt) reicht dort aus.

Importiert heißt hier nicht inkludiert (wie z.B. in C, C++ oder PHP). Man kann es mehr mit bekanntgeben vergleichen.

Grüße... Heiko

Verfasst: Freitag 21. November 2008, 08:34
von mathi
Vielen Dank an bwbg und Zap.

Damit ist das auch geklärt und ich bin beruhigt. Natürlich habt Ihr recht, die Module dort bekannt zu geben wo man's braucht.
da es kein neuer Import im eigentlichen Sinne ist
Das war genau meine Befürchtung 8)

Gruß Mathi

Verfasst: Freitag 21. November 2008, 10:28
von BlackJack
Wenn man ein Modul auslagert und am Ende trotzdem die gleichen Importe in beiden Modulen benötigt, kann das auch ein "code smell" sein. Wenn man zum Beispiel die Programmlogik in ein eigenes Modul steckt und danach dort immer noch GUI-Module und in der GUI immer noch `math` für Berechnungen, die nichts mit der GUI zu tun haben, braucht, ist etwas an der Aufteilung faul.