CodeBlanks Logo Icon CodeBlanks

field()

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

main.py
# Team veri sınıfını field ile yaz

Örnek çözüm

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

Soru
from dataclasses import dataclass, field

@dataclass
class Team:
    name: str = ""
    members: list = field(default_factory=____)

    def add(self, m):
        self.members.append(m)
Cevap
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

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