CodeBlanks Logo Icon CodeBlanks

Blog sınıfı

Blog sınıfıyla koleksiyon yönetimini kurarsın.

Blog sınıfı koleksiyonu yönetir

Tek bir Post örneği elindeyken onu bir listede toplamak gerekir. Blog sınıfı bu işi üstlenir: posts adında boş bir liste tutar ve add_post metodu ile yeni yazıları ekler.

posts: list = field(default_factory=list) satırı, her yeni Blog örneğine kendi boş listesini verir. default_factory=list kullanmazsan tüm örnekler aynı listeyi paylaşır; bu yaygın bir hatadır.

add_post metodu

add_post metodu tek satırlık bir iş yapar: self.posts.append(post). self sözde değişkeni, örnek kendisini ifade eder; böylece metodun içinde posts listesine erişirsin. Metodu çağırmak için blog.add_post(Post(...)) yazarsın; veri sınıfı örneği tek satırda hazır olur.

Eklemeden sonra len(blog.posts) kaç yazı olduğunu söyler. Bu sayı, ekleme işinin başarılı olduğunu doğrular.

Uygulama Blog sınıfını ve add_post metodunu yaz

Üstteki Post ve Comment sınıfları hazır. Şimdi @dataclass ile Blog sınıfını tanımla; posts: list = field(default_factory=list) alanını ekle ve def add_post(self, post): metodunu self.posts.append(post) gövdesiyle yaz. Sonra blog = Blog() ile bir blog oluştur, iki yazı ekle ve print(len(blog.posts)) ile yazı sayısını yazdır.

Başlangıç kodu

main.py
from dataclasses import dataclass, field

@dataclass
class Post:
    title: str = ""
    content: str = ""
    author: str = ""

@dataclass
class Comment:
    author: str = ""
    text: str = ""

# Blog sınıfını tanımla: posts listesi ve add_post metodu

# Bir blog oluştur, iki yazı ekle, sayıyı yazdır

Örnek çözüm

main.py
from dataclasses import dataclass, field

@dataclass
class Post:
    title: str = ""
    content: str = ""
    author: str = ""

@dataclass
class Comment:
    author: str = ""
    text: str = ""

@dataclass
class Blog:
    posts: list = field(default_factory=list)

    def add_post(self, post):
        self.posts.append(post)

blog = Blog()
blog.add_post(Post(title="İlk", author="Ayşe"))
blog.add_post(Post(title="İkinci", author="Ali"))
print(len(blog.posts))

Beklenen çıktı

2

Soru ve cevaplar

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

1 posts alanının varsayılanını tamamla

Soru
@dataclass
class Blog:
    posts: list = field(default_factory=____)

    def add_post(self, post):
        self.posts.append(post)
Cevap
@dataclass
class Blog:
    posts: list = field(default_factory=list)

    def add_post(self, post):
        self.posts.append(post)

Açıklama: default_factory=list her örneğe ayrı boş liste üretir.

2 default_factory=list ne işe yarar?

  • Liste türünü döndürür
  • Her örneğe ayrı boş liste üretir Doğru cevap
  • Listeyi sınıf genelinde paylaştırır
  • Liste öğelerini otomatik doldurur

Açıklama: default_factory=list her yeni örneğe kendi boş listesini verir; sınıf genelinde paylaşılan liste hatası önlenir.

3 Blog sınıfı kavramlarını eşleştir

Kavram Anlamı
posts Yazı listesi
add_post Yazı ekleme metodu
len Sayı verme işlevi
self Örnek kendisi

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