Anwendung von pickle und classmethods
Verfasst: Donnerstag 24. Februar 2005, 09:18
Hi
hier mal etwas Pseudo-Code einer Anwendung des Pickleprotokols, weil schon einige Male Zweifel an dessen Nützlichkeit aufgetaucht sind
. Dies hier beschreibt das Pickling und Unpickling von Klasseninstanzen in Verbindung mit classmethod, was u.U. einige Zeilen Code sparen und mancher grauen Zelle das Leben retten kann (wie kann ich verdammtnochmal meine Klasse einfach initialisieren???
):
kann man folgendermaßen nutzen:
Na gut, das ist nicht die einzige Anwendung und es geht auch anders - aber es ist eine mögliche Anwendung, die, wie ich finde sehr, sehr praktisch ist. Für irgendjemanden hier vielleicht auch. Würde mich freuen.
Gruß,
Christian
edit: Vorschläge vom 27.10.07 eingearbeitet.
edit: nochmals korrigiert am 28.10.07
edit: Korregiert am 29.10.07
hier mal etwas Pseudo-Code einer Anwendung des Pickleprotokols, weil schon einige Male Zweifel an dessen Nützlichkeit aufgetaucht sind


Code: Alles auswählen
import pickle
class SomeClass:
def __init__(self, name, somedata):
self.name = name
self.somedata = somedata
#und was man sonst noch so in __init__ machen kann
def toFile(self, fname):
pickle.dump(self, open(fname, 'wb'), 2) #binäres Picklingprotokoll
#Python2.4 Syntax:
@classmethod
# oder @staticmethod , wenn 'cls' nicht gebraucht wird
def fromFile(cls, fname):
return pickle.load(open(fname, 'rb'))
#das zurückgegebene Objekt entspricht der Klasseninstanz
#weiteres Rummachen mit cls ist also unnötig
#oder classmethod-Definition in Python2.3 Syntax
#fromFile = classmethod(fromFile)
Code: Alles auswählen
from SomeClass import SomeClass
x = SomeClass(name="somename",somedata="somedata")
x.toFile('test.dat')
#raus aus Python und wieder rein
from SomeClass import SomeClass
x = SomeClass.fromFile('test.dat')
Gruß,
Christian
edit: Vorschläge vom 27.10.07 eingearbeitet.
edit: nochmals korrigiert am 28.10.07
edit: Korregiert am 29.10.07