@cached_property
- Python kursu
- Orta seviye
- Ders 39/116
- 5 dk
@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
# Rectangle sınıfını @cached_property ile yazÖrnek çözüm
# 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ı
from functools import ____
class Rectangle:
def __init__(self, w, h):
self.w = w
self.h = h
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.