Насколько я понимаю, методы __init__()
и __enter__()
диспетчера контекста вызываются ровно один раз каждый, один за другим, не оставляя никаких шансов для выполнения какого-либо другого кода между ними. Какова цель разделения их на два метода и что я должен вложить в каждый из них?
Изменить: извините, не обращал внимания на документы.
Изменить 2: на самом деле, я запутался, потому что думал о декораторе @contextmanager
. Диспетчер контекста, созданный с помощью @contextmananger
, можно использовать только один раз (генератор будет исчерпан после первого использования), поэтому часто они записываются с вызовом конструктора внутри оператора with
; и если бы это был единственный способ использовать оператор with
, мой вопрос имел бы смысл. Конечно, в действительности менеджеры контекста носят более общий характер, чем то, что может создать @contextmanager
; в частности, менеджеры контекста, как правило, могут использоваться повторно. Надеюсь, на этот раз я понял?