Zum Hauptinhalt springen

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

Mini-QuizWas speichert man typischerweise in JSON?

Speichern sitzt! Mini-Projekt: Klassenzimmer.