Basics: Aus importiertem Modul auf den lokalen Namensraum zu

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
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Mittwoch 30. Januar 2008, 15:51

Hallo,

ich stehe mal wieder auf dem Schlauch. Ich versuche mich gerade daran, eigene Klassen in Module auszulagern.
Dabei stelle ich mich aber zu doof an...

Problem:
Ich habe die Klasse "Xyz", die ich in das aktuelle Skript importiere.
In dieser Klasse wird auf ein Dictonairy "DICT" zugegriffen.
"DICT" ist aber im aktuellen Skript definiert. Also bekomme ich immer die Fehlermeldung:
"NameError: global name 'DICT' is not defined"

Wie ermögliche ich den Zugriff auf DICT?

Ich bin dankbar für jede Hilfe!
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 30. Januar 2008, 16:03

Du übergibst einfach das Dictionary als Parameter beim Instanziieren der Klasse. Aber zeig mal etwas Quellcode, es hört sich so an, als wenn da einiges designtechnisch nicht so schön gelöst ist (globale Variablen, keine sinnvolle Aufteilung in Module).
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Mittwoch 30. Januar 2008, 16:10

Diese Klasse wird importiert:

Code: Alles auswählen

# -*- coding: utf-8 -*-
import wx

class DlgOverview(wx.Dialog):
    def __init__(self, *args, **kwds):
        # begin wxGlade: DlgOverview.__init__
        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
        wx.Dialog.__init__(self, *args, **kwds)
        self.sizer_5_staticbox = wx.StaticBox(self, -1, u"Übersicht")
        ........
und hier importiere ich sie:

Code: Alles auswählen

if __name__=="__main__":
    # -*- coding: utf-8 -*-
    import wx
    import DlgOverview

Ebay_DB = {"Art.Nr: 0001":[u"Artikelname.....",
"Pfad zum jpeg", "", 1.75, 6.75, 5.0, u"12. 07. 2007",
u"01. 01. 2008", u"Bla"]}

ItemID = "Art.Nr: 0001"

app = wx.PySimpleApp()
frame = DlgOverview(None, -1)
frame.Show()
app.MainLoop()
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Mittwoch 30. Januar 2008, 16:11

:arrow: EyDu, Grüße aus der Danziger Str.......
BlackJack

Mittwoch 30. Januar 2008, 16:12

Entweder die Definition von `DICT` ebenfalls in das Modul mit der Klasse verschieben, oder den Instanzen der Klasse eine Referenz als Argument mit geben.
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Mittwoch 30. Januar 2008, 16:17

Hallo BlackJack,
oder den Instanzen der Klasse eine Referenz als Argument mit geben.
genau das würde ich gerne machen. Ich stelle mich nur zu doof dafür an....
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 30. Januar 2008, 18:59

Code: Alles auswählen

class DlgOverview(wx.Dialog):
    def __init__(self, the_dict, *args, **kwds):
        self.a_name = the_dict
    ....

----

#erstellen
a_dict = {...}
frame = DlgOverview(a_dict, None, -1)
Jetzt kannst du innerhalb der Methoden einer Instanz vonDlgOverview mit "a_name" auf das übergebene Dictionary zugreifen. War jetzt hoffentlich nicht zu abstrakt das Beispiel.

:arrow: DocFischer, Grüße vom Tirschenreuther Ring zurück.
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Mittwoch 30. Januar 2008, 20:50

EyDu, ich danke Dir!!!
Antworten