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