CodeBlanks Logo Icon CodeBlanks

__enter__ ve __exit__

__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

main.py
# Kaynak sınıfını context manager yap
# with ile kullan

Örnek çözüm

main.py
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

Soru
class Kaynak:
    def ____(self):
        print("aç")
        return self
Cevap
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.

Orta seviye bölümündeki tüm dersler