field()
- Python kursu
- Orta seviye
- Ders 54/116
- 5 dk
field(default_factory=...) ile varsayılan değerleri öğrenirsin.
field() ne işe yarar?
Bir alanın varsayılanı değişebilir bir nesne ise (liste, sözlük, küme) doğrudan = [] yazamazsın; Python bunu tüm örneklerde paylaştırır. Bunun yerine field(default_factory=list) kullanırsın; her yeni örneğe ayrı boş liste üretilir.
Örnek: members: list = field(default_factory=list). Bu satır, her yeni örnekte list() çağrısını yapar ve ayrı bir boş liste verir. default_factory'ye dict, set ya da kendi işlevini de verebilirsin.
Paylaşılan liste tuzağı
Eğer members: list = [] yazarsan Python tüm örneklerde aynı listeyi kullanır. Bu, çok ince bir hatadır: bir örneğe eklediğin öğe başka bir örnekte de görünür. field(default_factory=list) bu tuzağı tamamen ortadan kaldırır.
Benzer şekilde sözlük için field(default_factory=dict), küme için field(default_factory=set) kullanılır. Değişmez türler için (int, str, tuple) doğrudan varsayılan yazabilirsin; sorun çıkmaz.
Uygulama Team sınıfına field ekle
from dataclasses import dataclass, field ile başla. @dataclass ile Team sınıfını tanımla; name: str = "" ve members: list = field(default_factory=list) alanlarını ekle. Sınıfa def add(self, m): metodu ekle, gövdede self.members.append(m) yaz. Sonra t = Team(name="Yıldızlar") ile örnek oluştur, t.add("Ayşe") ile üye ekle ve print(len(t.members)) ile yazdır.
Başlangıç kodu
# Team veri sınıfını field ile yazÖrnek çözüm
# Team veri sınıfını field ile yaz
from dataclasses import dataclass, field
@dataclass
class Team:
name: str = ""
members: list = field(default_factory=list)
def add(self, m):
self.members.append(m)
t = Team(name="Yıldızlar")
t.add("Ayşe")
print(len(t.members))Beklenen çıktı
1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 default_factory çağrısını tamamla
from dataclasses import dataclass, field
@dataclass
class Team:
name: str = ""
members: list = field(default_factory=____)
def add(self, m):
self.members.append(m)
from dataclasses import dataclass, field
@dataclass
class Team:
name: str = ""
members: list = field(default_factory=list)
def add(self, m):
self.members.append(m)
Açıklama: default_factory=list her örneğe ayrı boş liste üretir.
2 members: list = [] neye yol açar?
- Sözdizimi hatası
- Hiçbir şey, sorun yok
- Otomatik boş liste üretir
- Tüm örnekler aynı listeyi paylaşır Doğru cevap
Açıklama: Doğrudan [] tüm örneklerde aynı liste paylaşılır; bu bir hatadır.
3 field() parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
field |
İşlev |
default_factory |
Fabrika argümanı |
list |
Boş liste üretir |
dict |
Boş sözlük üretir |