Objekt in andere Module übernehmen

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
greinar
User
Beiträge: 7
Registriert: Dienstag 28. Januar 2014, 15:47

Python 2.7 - Bis dato habe ich in meinem Projekt die Grundwerte einfach direkt aus einem Modul importiert, also:

Code: Alles auswählen

config.pyw
MAX_WHATEVER = 10

Code: Alles auswählen

xyz.pyw
from config import MAX_WHATEVER
Nun wollte ich das etwas flexibler gestalten und lese die Werte mit dem ConfigParser aus einer Datei. Allerdings stehe ich auf dem Schlauch wenn es darum geht, in anderen Modulen auf das entstandene Objekt/die Werte in diesem Objekt zuzugreifen.

Code: Alles auswählen

main.pyw
from xyz import DoSomething
from config import read_config_data

class Main(object)
    def __init__(self):
        self.config = read_config_data()  # read_config_data erstellt mittels ConfigParser ein entsprechendes Objekt und gibt dieses zurück

    def __go(self):
        DoSomething()

Code: Alles auswählen

xyz.pyw
# from main import Main funktioniert ja wohl nicht

class DoSomething(object)
    def __init__(self):

        # hier würde ich die Werte aus Main.config brauchen

    def __go(self):
        pass
Wie kann ich also in DoSomething auf die Konfigurationsparamter zugreifen? Die Werte bei jedem Aufruf als Parameter weiterzugeben sehe ich als nicht praktikabel. Bei meinen Recherchen habe ich Vorschläge gesehen, dafür __builtins__ zu verwenden, was mir wegen der vielen Unterstriche im Modulnamen aber irgendwie widerstrebt.

Oder gehe ich die Sache prinzipiell falsch an? Kann mir hier jemand einen Denkanstoss verpassen?

Vielen Dank im Voraus.
Benutzeravatar
snafu
User
Beiträge: 6830
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Gestalte die Funktion (oder Mehode) doch einfach so, dass ein ``config.get('MAX_WHATEVER')`` möglich ist.
BlackJack

@greinar: Anmerkung am Rande: Die doppelten führenden Unterstriche bei `__go()`gehören dort nicht hin. Um etwas als Implementierungsdetail zu kennzeichnen verwendet man *einen* führenden Unterstrich!
greinar
User
Beiträge: 7
Registriert: Dienstag 28. Januar 2014, 15:47

snafu hat geschrieben:Gestalte die Funktion (oder Mehode) doch einfach so, dass ein ``config.get('MAX_WHATEVER')`` möglich ist.
Mein Problem ist ja nicht der Zugriff auf die Daten des Objekts, sondern der Zugriff auf das Objekt in anderen Modulen.

BlackJack hat geschrieben:@greinar: Anmerkung am Rande: Die doppelten führenden Unterstriche bei `__go()`gehören dort nicht hin. Um etwas als Implementierungsdetail zu kennzeichnen verwendet man *einen* führenden Unterstrich!
Danke für den Hinweis.
Antworten