Özet - Dataclass'lar
- Python kursu
- Orta seviye
- Ders 58/116
- 5 dk
@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
# Product sınıfını field, __post_init__ ve asdict ile yazÖrnek çözüm
# 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ı
from dataclasses import dataclass, field, ____
@dataclass
class Product:
name: str = ""
price: int = 0
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 |