Property Dekoratörü
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 10 / 64.
@property dekoratörü, metotlara nitelik gibi erişmenizi sağlayarak değerleri alma ve ayarlama konusunda temiz bir yol sunar. Bu durum kapsülleme (encapsulation) için oldukça kullanışlıdır; sınıfınızın genel arabirimini (public interface) değiştirmeden doğrulama mantığı veya hesaplanmış değerler eklemenize olanak tanır.
İşte @property kullanan bir class örneği:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def area(self):
return 3.14159 * self._radius ** 2Gerçek değeri saklamak için self._radius kullandığımıza dikkat edin. Getter içinde self.radius kullansaydık, getter metodunu tekrar çağırır ve sonsuz özyinelemeye (infinite recursion) yol açardı.
Bir daire oluşturun ve özelliklere erişin:
my_circle = Circle(5)Özelliklere normal öznitelikler gibi erişin:
print(my_circle.radius)
print(my_circle.area)Çıktı:
5
78.53975Özelliklere erişirken parantez () kullanmadığınıza dikkat edin - öznitelik gibi görünürler ancak metot kodunu çalıştırırlar.
Doğrulama ile değerlerin değiştirilmesine izin vermek için bir setter ekleyin:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value > 0:
self._radius = value
else:
print("Radius must be positive!")Artık yarıçapı bir öznitelik gibi ayarlayabilirsiniz:
my_circle = Circle(5)
my_circle.radius = 10 # Uses the setter
print(my_circle.radius) # Uses the getterÇıktı:
10Anahtar Nokta: @property metotların öznitelik gibi görünmesini sağlarken, @property_name.setter değerlerin nasıl atandığını kontrol etmenize imkan tanıyarak veri doğrulaması ve kapsüllemeyi (encapsulation) mümkün kılar.
Kendin dene
Bu ders bir kod alıştırması içermiyor.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Object Oriented Programming bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı