Özet - Property ve decorator
- Python kursu
- Orta seviye
- Ders 41/116
- 5 dk
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
# Square sınıfını @property ve @cached_property ile yazÖrnek çözüm
# 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ı
from functools import cached_property, ____
def call(fn):
@functools.wraps(fn)
def wrapper(*a, **k):
return fn(*a, **k)
return wrapper
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 |