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

[gelöst] Importfunktion

Beitragvon mathi » 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

Beitragvon Zap » 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: 370
Registriert: Mittwoch 23. Januar 2008, 13:35

Beitragvon bwbg » 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

Beitragvon mathi » 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

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]