Пайтон: Менеджери контексту — як і навіщо?

Мабуть кожен пайтон-дев бачив цю, на перший погляд просту і зручну, конструкцію:

with open('file', 'w+') as file:
    file.write('Hello, World')

Але коли вивчаєш пайтон глибше, виникає бажання почати писати щось подібне. Тож, що там під капотом? 🤔

А там ми знайдемо клас, який реалізує магічні методи __enter__ та __exit__, який я розберу іншим разом. У пайтона завжди є простіший метод, тут — за допомогою генератора 🙃

Отож, давайте зробимо свою версію open() 😁

import contextlib

@contextlib.contextmanager
def open(path, mode):
    file = File(path, mode)
    try:
        yield file
    finally:
        file.close()

*Тип File - вигаданий, для спрощення

Виглядає справді дуже просто, хіба ні?)

Глянемо детальніше, що відбувається:

  • Спочатку ми створимо файл

  • Потім “повернемо” (yield) його юзеру

  • За бажанням, контролюємо дії юзера, ловлячи помилки у блоці try/except

  • Прибираємо за собою — закриємо файл у блоці finally

Під юзером я маю на увазі вас самих чи ваших колег, які будуть використовувати ваш контекстний менеджер

Цей синтаксис можна пристосувати до своїх побутових чи робочих задач, якщо просто спробувати, рекомендую, бо сам активно використовую 😊

В якомусь майбутньому блозі я наведу наочний приклад використання, а наразі буду радий відповісти на ваші запитання ❤️

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Вітя
Вітя@kor0p

Python SDET @ ajax.systems

811Прочитань
10Автори
17Читачі
Підтримати
На Друкарні з 14 квітня

Більше від автора

  • Пайтон: дескриптори - що це???

    Можливо, навіть далеко не всі чули, що таке дескриптори, але точно всі використовували їхЯ кажу це так впевнено, оскільки @property є дескриптором

    Теми цього довгочиту:

    Програмування

Вам також сподобається

  • Продюсери і Консюмери в Kafka

    Стаття про продюсери і консюмери в Kafka. Producers, Consumers, Consumer groups, Rebalancing, Message delivery semantics, Offsets, Kafka partition picking, Avoiding duplicates, Message order maintaining, How many partitions should I choose for topic? Strategy for partitioning)

    Теми цього довгочиту:

    Kafka
  • RayLib — чудовий спосіб почати програмувати ігри.

    Хороший, але спартанський метод писати ігри багатьма мовами програмування. Якщо колись цікавила ця тема, то це чудовий спосіб почати шлях розробника ігор. Я розібрав сильні сторони цієї бібліотеки та пояснив чому з неї можна почати свій шлях. І не обов'язково починати на Unity.

    Теми цього довгочиту:

    Програмування
  • Розробка ігор для Atari 2600. Частина 1.

    Цією публікацією хочу розпочати серію статей про программування для ігрової консолі Atari 2600. Atari випустила її у 1977 році, і це одна з перших ігрових систем, побудована на мікропроцесорі та картриджах. В першій статті малюємо на Атарі прапор України

    Теми цього довгочиту:

    Програмування

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається

  • Продюсери і Консюмери в Kafka

    Стаття про продюсери і консюмери в Kafka. Producers, Consumers, Consumer groups, Rebalancing, Message delivery semantics, Offsets, Kafka partition picking, Avoiding duplicates, Message order maintaining, How many partitions should I choose for topic? Strategy for partitioning)

    Теми цього довгочиту:

    Kafka
  • RayLib — чудовий спосіб почати програмувати ігри.

    Хороший, але спартанський метод писати ігри багатьма мовами програмування. Якщо колись цікавила ця тема, то це чудовий спосіб почати шлях розробника ігор. Я розібрав сильні сторони цієї бібліотеки та пояснив чому з неї можна почати свій шлях. І не обов'язково починати на Unity.

    Теми цього довгочиту:

    Програмування
  • Розробка ігор для Atari 2600. Частина 1.

    Цією публікацією хочу розпочати серію статей про программування для ігрової консолі Atari 2600. Atari випустила її у 1977 році, і це одна з перших ігрових систем, побудована на мікропроцесорі та картриджах. В першій статті малюємо на Атарі прапор України

    Теми цього довгочиту:

    Програмування