Rozdział 15 · Python i akta

Mini-projekt: ratowanie Player

Obiekt z rozdziału 14 w końcu wie, jak przetrwać restart programu.

Połącz rozdział 14 (dataclasses, obiekty) i rozdział 15 (JSON, pliki): zapisz i Prześlij prawdziwą postać z gry.

player_dataclass.py
from dataclasses import dataclass, asdict

@dataclass
class Player:
    name: str
    score: int
    inventory: list[str]

Zachowanie

save_player.py
import json
from dataclasses import asdict
from pathlib import Path

player = Player(name="Anna", score=1200, inventory=[„miecz”, „tarcza”])

with Path("save.json").open("w", encoding="utf-8") as f:
    json.dump(asdict(player), f, ensure_ascii=False, indent=2)
asdict() jest skrótem od dataclass do słownika
dataclasses.asdict() (rozdział 14) zamienia instancję dataclass w zwykły słownik — jeśli wszystkie wartości wewnątrz są już kompatybilne z JSON- (łańcuch znaków, liczby, listy, słowniki), wynik można przekazać bezpośrednio json.dump().

Ładowanie

load_player.py
import json
from pathlib import Path

with Path("save.json").open("r", encoding="utf-8") as f:
    data = json.load(f)

loaded_player = Player(**data)
print(loaded_player)
player : Player
name = "Anna"
score = 1200
asdict() + json.dump()
save.json
JSON-text na dysku
program kończy się
json.load() + Player(**data)
loaded_player : Player
name = "Anna"
score = 1200
loaded_player — TO NIE ten sam obiekt co player:, to nowa instancja, przywrócona z pliku.
To nie jest „ten sam” obiekt
Po ponownym uruchomieniu programu loaded_player jest nowe egzemplarz Playerzbudowany z danych pliku, a nie z obiektu, który istniał w poprzednim uruchomieniu programu. Po prostu ma ten sam stan — i to jest cel trwałości: nie po to, by zapisać sam obiekt Python, ale by przechować wystarczająco dużo danych, by przywrócić równoważny stan.
Challenge
Dalej samodzielnie: JSON książka kontaktowa

Weź książkę kontaktów z rozdziału 12 (słownik imię → numer telefonu) i dodaj do niej zapisy/ładowanie przez JSON, zgodnie z przykładem tej sekcji — wtedy kontakty przetrwają restart programu.

Praktyka: Zapisz i wczytaj Player
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →