CodeBlanks Logo Icon CodeBlanks

@cached_property

@cached_property ile önbelleğe alınmış özellikleri öğrenirsin.

@cached_property

@cached_property functools modülünden gelir ve @property'nin önbelleğe alınmış halidir. Hesaplama bir kez yapılır, sonuç örnek sözlüğüne yazılır; sonraki erişimler doğrudan önbellekten okunur.

Örnek: pahalı bir alan hesabı @cached_property\ndef area(self):\n return self.w * self.h. İlk erişim hesaplar, ikinci erişim önbellekten döner. Örnek özniteliği silinirse (del obj.area) önbellek temizlenir ve bir sonraki erişim yeniden hesaplar.

Ne zaman kullanılır?

@cached_property, pahalı ve değişmeyen hesaplamalar için idealdir. Örnek: bir dosyadan satır sayısı, karmaşık bir matematik sonucu ya da büyük bir liste üzerinde toplam. Hesaplama bir kez yapıldıktan sonra aynı örnek üzerinde değişmiyorsa önbellek doğru çalışır.

Örnek değişiyorsa önbellek eski kalır; bu durumda __dict__'ten silerek yeniden hesaplama yapabilirsin. Değişmeyen (frozen) veri sınıfları ile çok iyi uyum sağlar; örneğin koordinat türleri.

Uygulama Rectangle için cached_property

from functools import cached_property ile başla. Rectangle sınıfını tanımla; def __init__(self, w, h): ve gövdede self.w = w, self.h = h yaz. @cached_property ile def area(self): metodu ekle, gövdede return self.w * self.h yaz. Sınıftan sonra r = Rectangle(4, 5) ile örnek oluştur ve print(r.area) ile yazdır.

Başlangıç kodu

main.py
# Rectangle sınıfını @cached_property ile yaz

Örnek çözüm

main.py
# Rectangle sınıfını @cached_property ile yaz
from functools import cached_property

class Rectangle:
    def __init__(self, w, h):
        self.w = w
        self.h = h

    @cached_property
    def area(self):
        return self.w * self.h

r = Rectangle(4, 5)
print(r.area)

Beklenen çıktı

20

Soru ve cevaplar

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

1 Property türlerini eşleştir

Kavram Anlamı
@property Her seferinde hesaplar
@cached_property Bir kez hesaplar, sonra önbellek
del obj.area Önbelleği temizler
functools Modül

2 @cached_property ne zaman önbelleği yeniler?

  • Her çağrıda
  • Öznitelik silinince Doğru cevap
  • Sadece program başlarken
  • Sınıf tanımlanırken

Açıklama: del ile öznitelik silinirse önbellek temizlenir ve bir sonraki erişim yeniden hesaplar.

3 cached_property import satırı

Soru
from functools import ____

class Rectangle:
    def __init__(self, w, h):
        self.w = w
        self.h = h
Cevap
from functools import cached_property

class Rectangle:
    def __init__(self, w, h):
        self.w = w
        self.h = h

Açıklama: cached_property functools modülünden alınır.

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