Z tego, co rozumiem, __init__()
i __enter__()
metody menedżera kontekstu są wywoływane dokładnie jeden po drugim, jeden po drugim, nie pozostawiając żadnej szansy na wykonanie innego kodu pomiędzy nimi. Jaki jest cel rozdzielenia ich na dwie metody i co powinienem umieścić w każdym z nich?__init__ vs __enter__ w menedżerach kontekstowych
Edycja: przepraszam, nie zwracałem uwagi na dokumenty.
Edytuj 2: właściwie, powodem, dla którego się pomyliłem, jest to, że myślałem o dekoratorze @contextmanager
. Menedżer kontekstu utworzony przy użyciu @contextmananger
może być użyty tylko jeden raz (generator zostanie wyczerpany po pierwszym użyciu), więc często są one zapisywane za pomocą wywołania konstruktora wewnątrz instrukcji with
; i jeśli byłby to jedyny sposób, aby użyć oświadczenia with
, moje pytanie miałoby sens. Oczywiście w rzeczywistości menedżerowie kontekstu są bardziej ogólni niż to, co może stworzyć; w szczególności menedżerowie kontekstowi mogą na ogół zostać ponownie wykorzystani. Mam nadzieję, że tym razem dobrze się stało?
Dezorientujesz * tworzenie * menedżera kontekstów z * wprowadzaniem * kontekstu. Oba są różne i możesz użyć tego samego menedżera kontekstu więcej niż jeden raz. –