Wie mit Modulen umgehen

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
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Hi Community,

ich habe zwei Module A und B. Model A benötigt etwas von B und B benötigt etwas von A.

Sprich:
In A:

Code: Alles auswählen

from B import stuff
In B:

Code: Alles auswählen

from A import stuff
Jetzt bekomm ich die Meldung:

Code: Alles auswählen

ImportError: cannot import name stuff
Wie umgehe ich das Problem? Mir fällt da auf anhieb nur ein Modul B komplett unabhängig von A zu entwickeln.

Hintergrund ist, dass ich in den zwei Modulen auf die gleiche Datenstruktur zugreifen will, aber diese Datenstruktur in Modul A erzeugt wird. Die Datenstruktur in ein Model C zu verschieben wäre vielleicht eine Lösung. Dies ist aber etwas umständlich. Was sagt ihr?

Grüße,
anogayales
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Warum ist es umständlich ein Modul C zu schreiben, worauf dann die Module A und B zugreifen können?
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

* keinen Code auf Modulebene haben, sondern hübsch mit Funktionen arbeiten und Daten ausschließlich als Parameter übergeben. Dann kann man eine Datenstruktur auch wunderbar in anderen Modulen verwenden (indem eine Funktion in A eine Funktion in B aufruft und die DS übergibt);

* Wenn zwei Module inhaltlich so eng verzahnt sind, daß wechselseitige Abhängigkeiten bestehen, dann sollte man sie zu einem Modul zusammenfassen.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Parameterübergabe bei jedem Aufruf finde ich einfach hässlich.

Wie geht ihr denn generell mit dem Problem um:

In Model-View Implementierungen kommt es ja oft vor, dass man viele kleine Klassen hat, die ineinander verschachtelt sind. Wenn jetzt das letzte Ui-Element (ganz unten in der Objekhierarchie) auf eine Datenstruktur zugreifen will, dann wäre es doch ganz einfach, dass ganze über eine globale Variable zu lösen und nicht eine Referenz der Variable in allen Ebenen weiterzureichen. Da entsteht doch Augenkrebs.

Grüße,
anogayales
Benutzeravatar
pillmuncher
User
Beiträge: 1482
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Ich glaube du suchst das hier.
In specifications, Murphy's Law supersedes Ohm's.
BlackJack

@anogayales: Nein da bekommt man keinen Augenkrebs. Ich bekomme den eher bei globalen Variablen. Das ist unflexibel, schlecht zu testen, und fehleranfällig. Saubere Entwürfe sind halt nicht immer das einfachste was irgendwie zum Ergebnis führt.
Antworten