Seite 1 von 1

Problem mit Pickle

Verfasst: Dienstag 24. Februar 2009, 17:59
von ruebe
Hi, ich bin neu in Python. Bisher noch ohne Probleme, aber an der Stelle komm ich nicht weiter.

Meine Informationen wie ich mit Pickle zu arbeiten habe, hab ich von hier
http://docs.python.org/library/pickle.html
Die Beispiele funktionieren auch alle und so denke ich eigtl auch das ich's verstanden habe.

Nun zum Problem:

Ich versuche mit pickel eine Instanz der folgenden Klasse zu speichern

Code: Alles auswählen

class ConfigData:
	outputdir = ''
	scriptsrc = ''
	sessionsrc = ''
Die Instanz habe ich global Definiert

Code: Alles auswählen

configdata = ConfigData()
Der Code zum speichern sieht so aus

Code: Alles auswählen

class DialogOptions(design.DialogOptions):
...
    def On_button_apply(self, event):
        self.EndModal(wx.ID_APPLY)
        #Daten übernehmen und speichern
        configdata.outputdir=self.text_outputdir.GetValue()
        configdata.scriptsrc=self.text_script.GetValue()
        configdata.sessionsrc=self.text_session.GetValue()
        f=open('rapidload.cfg','wb')
        pickle.dump(configdata,f)
        f.close()

...
Man sieht es müssten da dann auch Daten existieren. Allerdings stehen in der Datei am ende keinerlei Daten die ich wiederverwenden könnte. Abgepseichert wird nur folgendes:

(i__main__
ConfigData
p1
(dp2
b.

Wenn ich versuche die 3 Werte einzeln zu speichern, werden nur 3 leere Strings in der Datei gespeichert.

Wo liegt das Problem?

Verfasst: Dienstag 24. Februar 2009, 18:14
von Birne94

Code: Alles auswählen

class ConfigData:
    def __init__(self):
        outputdir = ''
        scriptsrc = ''
        sessionsrc = '' 
Probiers so mal...

Verfasst: Dienstag 24. Februar 2009, 18:14
von ruebe
nvm ich bin der Python Formatierung zum Opfer gefallen ... tabs vs leerzeichen sozusagen, hab den Unterschied an der stelle somit nicht gesehen

Verfasst: Mittwoch 25. Februar 2009, 10:33
von lutz.horn
Birne94 hat geschrieben:

Code: Alles auswählen

class ConfigData:
    def __init__(self):
        outputdir = ''
        scriptsrc = ''
        sessionsrc = '' 
Probiers so mal...
So sind das alles nur lokale Variablen. So geht es:

Code: Alles auswählen

class ConfigData:
    def __init__(self):
        self.outputdir = ''
        self.scriptsrc = ''
        self.sessionsrc = '' 

Verfasst: Mittwoch 25. Februar 2009, 15:14
von ruebe
Danke, ihr hab absolut recht. Klärt auch einige andere Nebeneffekte die ich hatte ;-)

Verfasst: Mittwoch 25. Februar 2009, 15:32
von DasIch
Solltet ihr kein Python 3 benutzen, empfiehlt es sich vorallem New-Style Klassen zu benutzen.