__enter__ ve __exit__
- Python kursu
- Orta seviye
- Ders 107/116
- 5 dk
__enter__ ve __exit__ ile context manager yazmayı öğrenirsin.
__enter__ ve __exit__
Bir sınıfı context manager yapmak için iki yöntem tanımlanır: __enter__ bloğun başında çalışır ve kaynağı döndürür; __exit__ bloğun sonunda çalışır ve temizlik yapar:
class Kaynak:
def __enter__(self):
print("aç")
return self
def __exit__(self, *args):
print("kapat")Bu iki yöntem, with deyiminin çalışmasını sağlar. __exit__ üç argüman daha alır — bunlar hata bilgisidir.
Bu, sınıf tabanlı context manager tanımlamanın yoludur.
__exit__ ve hata bilgisi
__exit__ yöntemi üç ek argüman alır: exc_type, exc_val, exc_tb. Bunlar blok içinde bir hata oluştuğunda bilgi taşır. Hata yoksa hepsi None'dır:
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_type is not None:
print("hata oluştu")
print("kapat")Eğer __exit__ True döndürürse hata bastırılır — with bloğunun dışına yayılmaz. False veya None döndürürse hata normal şekilde yayılır.
Bu, context manager içinde hata yönetimini sağlar.
Uygulama Sınıf tabanlı context manager yaz
class Kaynak: tanımla. __enter__ yönteminde print("aç") ve return self yaz. __exit__ yönteminde print("kapat") yaz. Sonra with Kaynak(): bloğu içinde print("içeride") yaz.
Başlangıç kodu
# Kaynak sınıfını context manager yap
# with ile kullanÖrnek çözüm
class Kaynak:
def __enter__(self):
print("aç")
return self
def __exit__(self, *a):
print("kapat")
with Kaynak():
print("içeride")Beklenen çıktı
aç içeride kapat
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 __enter__ yöntemini tamamla
class Kaynak:
def ____(self):
print("aç")
return self
class Kaynak:
def __enter__(self):
print("aç")
return self
Açıklama: __enter__ with bloğunun başında çalışır.
2 __enter__/__exit__ eşleştir
| Kavram | Anlamı |
|---|---|
__enter__ |
Blok girişi |
__exit__ |
Blok çıkışı |
exc_type |
Hata türü |
return True |
Hata bastır |
3 __exit__ True döndürürse ne olur?
- Hata iki kez fırlatılır
- Program çöker
- Blok tekrar çalışır
- Hata bastırılır Doğru cevap
Açıklama: __exit__ True döndürürse hata bastırılır ve with dışına yayılmaz.