Seite 1 von 1
Basics: Aus importiertem Modul auf den lokalen Namensraum zu
Verfasst: Mittwoch 30. Januar 2008, 15:51
von DocFisher
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!
Verfasst: Mittwoch 30. Januar 2008, 16:03
von EyDu
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).
Verfasst: Mittwoch 30. Januar 2008, 16:10
von DocFisher
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()
Verfasst: Mittwoch 30. Januar 2008, 16:11
von DocFisher

EyDu, Grüße aus der Danziger Str.......
Verfasst: Mittwoch 30. Januar 2008, 16:12
von BlackJack
Entweder die Definition von `DICT` ebenfalls in das Modul mit der Klasse verschieben, oder den Instanzen der Klasse eine Referenz als Argument mit geben.
Verfasst: Mittwoch 30. Januar 2008, 16:17
von DocFisher
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....
Verfasst: Mittwoch 30. Januar 2008, 18:59
von EyDu
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.

DocFischer, Grüße vom Tirschenreuther Ring zurück.
Verfasst: Mittwoch 30. Januar 2008, 20:50
von DocFisher
EyDu, ich danke Dir!!!