CodeBlanks Logo Icon CodeBlanks

Özet - Property ve decorator

Decorator ve @property'yi birleştirerek bir validated attribute yazarsın.

Özet - Property ve süsleyici

Bu grupta süsleyici (decorator) temellerini, fonksiyon süsleyicilerini, @property ile @x.setter kullanımını, @cached_property ile önbelleği ve @functools.wraps ile meta veri korumasını gördük.

Süsleyici @name biçiminde yazılır, hedef fonksiyonu sarar. @property özniteliğe erişimi, @x.setter atamayı yakalar. @cached_property bir kez hesaplar; @functools.wraps hedefin adını ve belgesini korur. Şimdi bunları birleştiren bir örneği yazacağız.

Uygulama Birleşik özet örneği

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

Başlangıç kodu

main.py
# Square sınıfını @property ve @cached_property ile yaz

Örnek çözüm

main.py
# Square sınıfını @property ve @cached_property ile yaz
from functools import cached_property

class Square:
    def __init__(self, side):
        self.side = side

    @property
    def perimeter(self):
        return 4 * self.side

    @cached_property
    def area(self):
        return self.side ** 2

s = Square(5)
print(s.perimeter, s.area)

Beklenen çıktı

20 25

Soru ve cevaplar

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

1 Hangi kombinasyon yanlış?

  • @property + @name.setter + @name.deleter
  • @property + @name.getter ikinci kez
  • @functools.wraps ile süsleyici
  • @cached_property tek başına Doğru cevap

Açıklama: @cached_property zaten okuma yapan bir önbellek; yanına setter eklenmez.

2 Süsleyici ve amacını eşleştir

Kavram Anlamı
@property Okuma yakalar
@cached_property Önbellek
@functools.wraps Meta veriyi korur
@name.setter Atama yakalar

3 cached_property içe aktarımı

Soru
from functools import cached_property, ____

def call(fn):
    @functools.wraps(fn)
    def wrapper(*a, **k):
        return fn(*a, **k)
    return wrapper
Cevap
from functools import cached_property, wraps

def call(fn):
    @functools.wraps(fn)
    def wrapper(*a, **k):
        return fn(*a, **k)
    return wrapper

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

4 Sınıf parçalarını eşleştir

Kavram Anlamı
__init__ Örnek kurulumu
@property Okuma özniteliği
@cached_property Önbellekli hesap
self.side Örnek özniteliği

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