CodeBlanks Logo Icon CodeBlanks

Özet - Dataclass'lar

@dataclass, field ve frozen'ı birleştirerek bir Product sınıfı yazarsın.

Özet - Dataclass'lar

Bu grupta @dataclass temellerini, field() ile değişebilir varsayılanları, frozen=True ile değişmezliği, __post_init__ ile doğrulamayı ve asdict/astuple dönüşümlerini gördük.

Veri sınıfı kurucu, repr ve eq metotlarını otomatik üretir; field(default_factory=...) her örneğe ayrı kapsayıcı verir; frozen=True değişmezlik sağlar; __post_init__ doğrulama için uygundur; asdict ve astuple veriyi başka biçimlere çevirir. Şimdi bunları birleştiren bir örneği yazacağız.

Uygulama Birleşik özet örneği

from dataclasses import dataclass, field, asdict ile başla. @dataclass ile Product sınıfını tanımla; name: str = "", price: int = 0 ve tags: list = field(default_factory=list) alanlarını ekle. def __post_init__(self): metodu ekle; gövdede if self.price < 0: ve raise ValueError("negatif olamaz") yaz. Sonra p = Product(name="Kalem", price=10) ile örnek oluştur ve print(p.name, p.price) ile print(asdict(p)) çağrılarını yap.

Başlangıç kodu

main.py
# Product sınıfını field, __post_init__ ve asdict ile yaz

Örnek çözüm

main.py
# Product sınıfını field, __post_init__ ve asdict ile yaz
from dataclasses import dataclass, field, asdict

@dataclass
class Product:
    name: str = ""
    price: int = 0
    tags: list = field(default_factory=list)

    def __post_init__(self):
        if self.price < 0:
            raise ValueError("negatif olamaz")

p = Product(name="Kalem", price=10)
print(p.name, p.price)
print(asdict(p))

Beklenen çıktı

Kalem 10
{'name': 'Kalem', 'price': 10, 'tags': []}

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangi kombinasyon yanlış?

  • @dataclass + field(default_factory=list)
  • @dataclass(frozen=True) + members: list = [] Doğru cevap
  • @dataclass + asdict + astuple
  • @dataclass(frozen=True) + __post_init__

Açıklama: Frozen sınıfta değişmez liste olmaz.

2 Veri sınıfı kavramlarını eşleştir

Kavram Anlamı
@dataclass Otomatik kurucu
field(default_factory=list) Boş liste fabrikası
frozen=True Değişmezlik
__post_init__ Doğrulama

3 asdict içe aktarımı

Soru
from dataclasses import dataclass, field, ____

@dataclass
class Product:
    name: str = ""
    price: int = 0
Cevap
from dataclasses import dataclass, field, asdict

@dataclass
class Product:
    name: str = ""
    price: int = 0

Açıklama: asdict dataclasses modülündedir.

4 Sınıf parçalarını eşleştir

Kavram Anlamı
@dataclass Süsleyici
field(default_factory=list) Değişebilir varsayılan
__post_init__ Doğrulama metodu
asdict(p) Sözlüğe çevirme

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