Глава 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, построенный из данных файла, а не тот объект, что существовал в предыдущем запуске программы. Он просто имеет такое же состояние — и в этом и есть смысл персистентности: не сохранить сам объект Python, а сохранить достаточно данных, чтобы восстановить эквивалентное состояние.★★★ Задача повышенной сложности
Дальше самостоятельно: книга контактов на JSON
Возьмите контактную книгу главы 12 (словарь имя → телефон) и добавьте ей сохранение/загрузку через JSON, по образцу этого раздела — теперь контакты будут переживать перезапуск программы.
Практика: сохраняем и загружаем Player
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки