Что нужно сделать
Реализуйте модернизированную версию контекст-менеджера File:
- теперь при попытке открыть несуществующий файл менеджер автоматически создаёт и открывает этот файл в режиме записи;
- на выходе из менеджера подавляются все исключения, связанные с файлами.
Что оценивается
- Результат вычислений корректен.
- Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
- При написании классов соблюдаются основные принципы ООП: инкапсуляция, наследование и полиморфизм.
- Для получения и установки значений у приватных атрибутов используются сеттеры и геттеры с соответствующими декораторами.
- Для создания нового класса на основе уже существующего используется наследование.
- Для статических и классовых методов используется декоратор
classmethod
.
- Сообщения о процессе получения результата осмысленны и понятны для пользователя.
- Переменные, функции и собственные методы классов имеют значащие имена, не
a
,b
,c
,d
. - Классы и методы/функции имеют прописанную документацию.
- Есть аннотация типов для методов/функций и их аргументов (кроме
args
иkwargs
). Если функция/метод ничего не возвращают, то используетсяNone
.
class File:
'''Класс контекст-менеджера File'''
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode
self.file = None
def __enter__(self):
try:
self.file = open(self.filename, self.mode, encoding='UTF-8')
except FileNotFoundError:
print(f'Создан файл {self.filename}')
self.file = open(self.filename, 'w', encoding='UTF-8')
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
self.file.close()
if exc_type is FileNotFoundError or FileExistsError:
return True
with File('doc.txt', 'r') as file:
newfile = file.read()