Глава 15 · Python и файлы

Мини-проект: сохраняем Player

Объект из главы 14 наконец умеет переживать перезапуск программы.

Соберём вместе главу 14 (dataclasses, объекты) и главу 15 (JSON, файлы): сохраним и загрузим настоящего игрового персонажа.

player_dataclass.py
from dataclasses import dataclass, asdict

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

Сохранение

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

player = Player(name="Anna", score=1200, inventory=["меч", "щит"])

with Path("save.json").open("w", encoding="utf-8") as f:
    json.dump(asdict(player), f, ensure_ascii=False, indent=2)
asdict() — короткий путь от dataclass к словарю
dataclasses.asdict() (глава 14) превращает экземпляр dataclass в обычный словарь — если все значения внутри уже JSON-совместимы (строки, числа, списки, словари), результат можно передать прямо в json.dump().

Загрузка

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-текст на диске
программа завершается
json.load() + Player(**data)
loaded_player : Player
name = "Anna"
score = 1200
loaded_player — НЕ тот же объект, что player: это новый экземпляр, восстановленный из файла.
Это не «тот же самый» объект
После перезапуска программы loaded_player — это новый экземпляр Player, построенный из данных файла, а не тот объект, что существовал в предыдущем запуске программы. Он просто имеет такое же состояние — и в этом и есть смысл персистентности: не сохранить сам объект Python, а сохранить достаточно данных, чтобы восстановить эквивалентное состояние.
★★★ Задача повышенной сложности
Дальше самостоятельно: книга контактов на JSON

Возьмите контактную книгу главы 12 (словарь имя → телефон) и добавьте ей сохранение/загрузку через JSON, по образцу этого раздела — теперь контакты будут переживать перезапуск программы.

Практика: сохраняем и загружаем Player
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →