Objektdaten speichern
Idee
JSON kennt keine Python-Klassen direkt. Darum: Objekt → Dict → JSON, und zurück.
import json
class Haustier:
def __init__(self, name, hunger):
self.name = name
self.hunger = hunger
def to_dict(self):
return {"name": self.name, "hunger": self.hunger}
@staticmethod
def from_dict(d):
return Haustier(d["name"], d["hunger"])
tiere = [Haustier("Mira", 3), Haustier("Nori", 5)]
daten = [t.to_dict() for t in tiere]
with open("tiere.json", "w", encoding="utf-8") as f:
json.dump(daten, f, indent=2)
# laden
with open("tiere.json", "r", encoding="utf-8") as f:
geladen = json.load(f)
tiere2 = [Haustier.from_dict(d) for d in geladen]
@staticmethod / from_dict ist fortgeschritten – du darfst auch eine normale Funktion haustier_from_dict schreiben.
Einfacher ohne staticmethod
def haustier_from_dict(d):
return Haustier(d["name"], d["hunger"])
Rate mal!
Warum nicht json.dump(mira) direkt?
Auflösung
JSON-Modul serialisiert standardmäßig keine eigenen Klassenobjekte so einfach.
Probiere es selbst
Experiment 1
to_dict für Spieler.
Experiment 2
Liste speichern.
Experiment 3
Laden und Objekte erzeugen.
Übungen
Level 1
Dict aus Attributen bauen.
Level 2
Speichern mit dump.
Level 3
Roundtrip: speichern, laden, print name.
Level-1-Lösung
def to_dict(self):
return {"name": self.name, "punkte": self.punkte}
Mini-Quiz
Speichern sitzt! Mini-Projekt: Klassenzimmer.