Hallo !
Mein erster Post und ich komme natürlich auch gleich mit einem Python Problem daher .
Folgendes: Ich habe um Vererbung zu üben eine Klasse Mitarbeiter und zwei Subklassen Chef und Arbeiter geschrieben.
Nun wollte ich mit Hilfe von pickle meine Instanz der Klassen Chef in einer Datei speichern und wieder laden.
Mit einem print Befehl habe ich dann c (auf dieser Variablen liegt das gepicklete Objetkt) und was ist meine Ausgabe? Folgende:
<__main__.Chef instance at 0x00CF7620>
er zeigt also den Speicherbereich an o_O, finde ich ziemlich komisch, aber ihr wisst da sicher besser bescheid, wenn ihr noch code braucht einfach posten Ciao
Problem beim "entpicklen" meines Objektes
Ja, bitte...LazyChicken hat geschrieben:wenn ihr noch code braucht einfach posten Ciao
Was erwartest du denn für eine Ausgabe?
Code: Alles auswählen
>>> class Foo(object):
... pass
>>> a = Foo()
>>> print a
<__main__.Foo object at 0xa6b1cfec>
>>> a.blubb = 42
>>> import cPickle
>>> pickled = cPickle.pickle(a)
>>> del a
>>> a
NameError: 'a' is not defined
>>> a = cPickle.loads(pickled)
>>> print a.blubb
42
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Was gibt denn "print c" aus, bevor du es pickelst und wieder einliest?
Nö, das ist nicht komisch. Das ist normal. print gibt bei Objekten immer die Speicheradresse und den voll qualifizierten Namen aus, wenn du dieses Verhalten für deine Klasse nicht änderst.LazyChicken hat geschrieben: er zeigt also den Speicherbereich an o_O, finde ich ziemlich komisch, aber ihr wisst da sicher besser bescheid, wenn ihr noch code braucht einfach posten
Die Methode, die dahinter steckt, ist __str__(self). Du kannst diese Methode in deiner Klasse überschreiben, um z.B. den Namen des Chefs zurückzugeben:
Code: Alles auswählen
class Chef:
...
def __str__(self):
return self.name
...
Gruß
lunar
Zuletzt geändert von lunar am Mittwoch 22. November 2006, 16:38, insgesamt 1-mal geändert.
-
- User
- Beiträge: 2
- Registriert: Montag 20. November 2006, 21:07
Alles klar danke lunar damit ist meine Frage beantwortet