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