[gelöst] Importfunktion

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
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Freitag 21. November 2008, 06:50

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
Zuletzt geändert von mathi am Freitag 21. November 2008, 08:34, insgesamt 1-mal geändert.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Freitag 21. November 2008, 08:05

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.
Benutzeravatar
bwbg
User
Beiträge: 379
Registriert: Mittwoch 23. Januar 2008, 13:35

Freitag 21. November 2008, 08:10

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
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Freitag 21. November 2008, 08:34

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
BlackJack

Freitag 21. November 2008, 10:28

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.
Antworten