← До списку лабораторних по Python
Повний опис / сценарій лабораторної:
Meta: навчитися закривати файли, зʼєднання та інші ресурси через конструкцію with та власні контекстні менеджери.
Krok 1. Створити файл src/app/context22.py.
Komandi: cd ~/python_lab1/src; touch app/context22.py
Krok 2. Додати приклад використання with для файлу.
Komanda: printf "from pathlib import Path
def write_file(path: str, text: str) -> None:
p = Path(path)
with p.open("w", encoding="utf8") as f:
f.write(text)
if __name__ == "__main__":
write_file("ctx22.txt", "hello")
" > app/context22.py
Krok 3. Запустити модуль і перевірити що файл створений.
Komandi: export PYTHONPATH=$(pwd); python app/context22.py; ls ctx22.txt
Krok 4. Навмисно згенерувати помилку всередині блоку with і переконатися що файл все одно закривається.
Poyasnennya: додай виклик 1 / 0 всередині блоку і запусти.
Krok 5. Створити власний клас контекстного менеджера з методами enter та exit.
Poyasnennya: наприклад клас Timer який міряє час виконання.
Krok 6. Використати цей клас у конструкції with в окремій функції.
Poyasnennya: всередині with виконай повільну операцію і виведи час.
Krok 7. Створити контекстний менеджер через декоратор contextmanager з модуля contextlib.
Poyasnennya: наприклад менеджер який тимчасово змінює поточний каталог.
Krok 8. Порівняти код на класі і через contextmanager за обсягом і читабельністю.
Krok 9. Занотувати де в реальних сервісах можна застосовувати контекстні менеджери, наприклад для транзакцій у базі.
Krok 10. Mini zvit.
Zavdannya: опиши коли варто робити власний контекстний менеджер замість простих try finally.