CodeBlanks Logo Icon CodeBlanks

@property

@property'nin descriptor olduğunu öğrenirsin.

@property bir descriptor mudur?

Evet — @property bir data descriptor'dır. property sınıfı arka planda __get__, __set__ ve __delete__ uygular ve bunları senin verdiğin fonksiyonlara bağlar.

@property okuma fonksiyonunu işaretler. @ad.setter yazma fonksiyonunu, @ad.deleter silme fonksiyonunu bağlar. Böylece descriptor protokolünü elle yazmadan aynı gücü elde edersin. property, en sık kullanılan descriptor'dır ve çoğu durumda özel descriptor yazmaktan daha okunaktır.

Property ile doğrulama

@property ve @ad.setter birlikte doğrulama için kullanılır. Setter içine if koyup geçersiz değeri raise ValueError ile reddedersin.

İç değeri self._x gibi alt çizgiyle saklarsın; bu, Python'da 'özel' işareti olarak kabul edilir. Property, dışarıdan x olarak görünür ama her erişim fonksiyonlarından geçer. Bu desen, sınıfın iç temsilini gizlerken dış API'yi kararlı tutar. Kullanıcı obj.x = -5 yazınca setter doğrular ve gerekirse hata fırlatır.

Uygulama Property ile sıcaklık doğrulama

Bir Thermometer sınıfı yaz. __init__ içinde self._celsius = 0 tanımla. @property ile celsius okuma yöntemi ekle; self._celsius'yu döndürsün. @celsius.setter ile yazma yöntemi ekle; değer -273'ten küçükse ValueError fırlat, değilse self._celsius = value yap. Örnek oluştur, celsius = 25 ata ve yazdır.

Başlangıç kodu

main.py
# Thermometer sınıfı yaz
# celsius property ekle
# değeri yazdır

Örnek çözüm

main.py
# Thermometer sınıfı yaz
class Thermometer:
    def __init__(self):
        self._celsius = 0
    @property
    def celsius(self):
        return self._celsius
    @celsius.setter
    def celsius(self, value):
        if value < -273:
            raise ValueError("cok dusuk")
        self._celsius = value

t = Thermometer()
t.celsius = 25
print(t.celsius)

Beklenen çıktı

25

Soru ve cevaplar

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

1 @property ne döndürür?

main.py
@property
def x(self):
    return self._x
  • Bir property nesnesi Doğru cevap
  • Özelliğin değerini
  • Bir fonksiyon nesnesi
  • Bir sınıf

Açıklama: bir property nesnesi. @property, fonksiyonu saran bir property nesnesi döndürür.

2 @property tanımını tamamla

Soru
class C:
    @____
    def x(self):
        return self._x
Cevap
class C:
    @property
    def x(self):
        return self._x

Açıklama: @property okuma yöntemini işaretler.

3 Property kavramlarını eşleştir

Kavram Anlamı
@property Okuma bağlar
@x.setter Yazma bağlar
property Data descriptor
@x.deleter Silme bağlar

Uzman bölümündeki tüm dersler