Python
@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.
Örnek çözümü göster
# 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)
Kendini test et
-
@property ne döndürür?
@property
def x(self):
return self._x
- Bir property nesnesi
- Özelliğin değerini
- Bir fonksiyon nesnesi
- Bir sınıf
Cevabı göster
Bir property nesnesi — bir property nesnesi. @property, fonksiyonu saran bir property nesnesi döndürür.
-
@property tanımını tamamla
class C:
@____
def x(self):
return self._x
Cevabı göster
class C:
@property
def x(self):
return self._x
-
Property kavramlarını eşleştir
- @property
- Okuma bağlar
- @x.setter
- Yazma bağlar
- property
- Data descriptor
- @x.deleter
- Silme bağlar
Sıradaki ders: __set_name__