__post_init__
- Python kursu
- Orta seviye
- Ders 56/116
- 5 dk
__post_init__ ile başlatma sonrası işlemleri öğrenirsin.
__post_init__ metodu
Veri sınıfında __init__ otomatik üretilir ama bazen örnek oluşturulduktan sonra doğrulama ya da hesaplama yapman gerekir. __post_init__ metodu, kurucu bittikten hemen sonra çağrılır.
Örnek: def __post_init__(self):\n if self.value < 0:\n raise ValueError("negatif olamaz"). Bu metot, kurucu alanları doldurduktan sonra çalışır. Negatif değer verilirse örnek oluşturulurken hata fırlar. Böylece geçersiz örnekleri en başta engellemiş olursun.
Doğrulama için ideal
__post_init__, doğrulama için ideal yerdir. Kurucu tüm alanları doldurduktan sonra çağrıldığı için tüm alanlara erişebilirsin. Negatif değer, boş dize ya da hatalı tür gibi koşulları kontrol edip gerekirse hata fırlatırsın.
Diğer bir kullanım, türetilmiş alanlar hesaplamaktır. Örnek: bir Rectangle sınıfında w ve h alanlarını alıp area alanını __post_init__ içinde hesaplayabilirsin. Böylece örnek hazır olduğunda area da dolu olur.
Uygulama Positive sınıfına __post_init__ ekle
from dataclasses import dataclass ile başla. @dataclass ile Positive sınıfını tanımla; value: int = 0 alanını ekle. def __post_init__(self): metodu ekle; gövdede if self.value < 0: ve raise ValueError("negatif olamaz") yaz. Sonra p = Positive(5) ile örnek oluştur ve print(p.value) ile yazdır.
Başlangıç kodu
# Positive sınıfına __post_init__ ekleÖrnek çözüm
# Positive sınıfına __post_init__ ekle
from dataclasses import dataclass
@dataclass
class Positive:
value: int = 0
def __post_init__(self):
if self.value < 0:
raise ValueError("negatif olamaz")
p = Positive(5)
print(p.value)Beklenen çıktı
5
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 __post_init__ parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
__post_init__ |
Kurucu sonrası metot |
__init__ |
Otomatik kurucu |
ValueError |
Doğrulama hatası |
self.value |
Doğrulanan alan |
2 __post_init__ ne zaman çalışır?
- Sınıf tanımlanırken
- Kurucudan hemen sonra Doğru cevap
- Yalnızca hata durumunda
- Örnek silinirken
Açıklama: __post_init__ kurucu bittikten hemen sonra çalışır.
3 doğrulama gövdesini tamamla
def __post_init__(self):
if self.value < 0:
raise ____("negatif olamaz")
def __post_init__(self):
if self.value < 0:
raise ValueError("negatif olamaz")
Açıklama: Negatif değer için ValueError uygundur.