### Задача 4. Работа с JSON и файлами (ООП, JSON, Исключения) **Постановка** * **Конфигурация:** Умеет читать и писать настройки в JSON-файл. * **Приложение:** Использует конфигурацию для хранения состояния. **Задание** **Класс `Config`:** 1. Создайте класс `Config`. 2. В `__init__(self, filename)` сохраните имя файла. 3. Метод `load(self)` — читает JSON-файл и возвращает словарь. Если файла нет, перехватывает `FileNotFoundError` и возвращает пустой словарь `{}`. 4. Метод `save(self, data)` — записывает словарь `data` в JSON-файл с отступами (`indent=4`) и кодировкой `utf-8`. 5. Метод `get(self, key, default=None)` — загружает данные и возвращает значение по ключу или `default`. 6. Метод `set(self, key, value)` — загружает данные, устанавливает новое значение, сохраняет обратно. **Класс `Application`:** 1. Создайте класс `Application`. 2. В `__init__(self, config)` сохраните объект `Config`. 3. Метод `run(self)` — выводит приветствие с именем пользователя из конфига (ключ `"username"`), по умолчанию `"Гость"`. 4. Метод `set_username(self, name)` — сохраняет имя в конфиг через `config.set`. **Тесты:** 1. Создайте `Config("settings.json")` и `Application(config)` 2. Запустите приложение (должно вывести "Гость") 3. Установите имя через `set_username("Иван")` 4. Запустите снова (должно вывести "Иван") 5. Проверьте, что файл `settings.json` создался и содержит правильные данные