Property Dekoratörleri
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 14 / 64.
Özellik dekoratörleri, basit öznitelik sözdizimini korurken özniteliklere nasıl erişildiğini ve bunların nasıl değiştirildiğini kontrol etmenizi sağlar.
İşte bir özellik alıcısı (property getter) içeren bir sınıf örneği:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._ageÖzelliği normal bir öznitelik gibi kullanın:
person = Person("Alice", 30)
print(person.age)Çıktı:
30Aslında bir metot çağırıyor olsa bile age özelliğine parantez kullanmadan eriştiğinize dikkat edin.
Değerleri atarken verileri doğrulamak için bir setter ekleyin:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative")
self._age = valueArtık yaşı otomatik doğrulama ile ayarlayabilirsiniz:
person = Person("Alice", 30)
person.age = 31 # Doğrulama ile setter'ı kullanır
print(person.age) # Getter'ı kullanır
# Bu bir hata fırlatır:
# person.age = -5 # ValueError: Yaş negatif olamazÇıktı:
31Değerleri hesaplayan hesaplanmış özellikler (computed properties) oluşturun:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
return self.width * self.height
rect = Rectangle(5, 3)
print(rect.area) # 5 * 3 = 15 hesaplarÇıktı:
15Anahtar Nokta: Property dekoratörleri, metotların öznitelik gibi görünmesini sağlar. Getter'lar için @property ve setter'lar için @attribute_name.setter kullanın. Bu, basit öznitelik erişim sözdizimini korurken veri doğrulama ve hesaplanmış değerlere olanak tanır.
Görev
Ortatemperature.py dosyasındaki Celsius ve Fahrenheit arasında dönüşüm yapan Temperature sınıfını tamamlayın. Ardından, sıcaklık dönüşümlerini test etmek için bu sınıfı driver.py dosyasında kullanın. Adım adım talimatlar için her iki dosyadaki TODO yorumlarını takip edin.
Kopya kağıdı
Özellik dekoratörleri (property decorators), basit öznitelik sözdizimini korurken özniteliklere nasıl erişildiğini ve bunların nasıl değiştirildiğini kontrol etmenizi sağlar.
Getter (alıcı) metotları için @property kullanın:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
person = Person("Alice", 30)
print(person.age) # Bir öznitelik gibi erişin, parantez yokDoğrulama içeren setter (ayarlayıcı) metotları için @attribute_name.setter kullanın:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative")
self._age = value
person = Person("Alice", 30)
person.age = 31 # Doğrulama ile setter'ı kullanırDeğerleri hesaplayan hesaplanmış özellikler (computed properties) oluşturun:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
return self.width * self.height
rect = Rectangle(5, 3)
print(rect.area) # 5 * 3 = 15 hesaplarKendin dene
# YAPILACAK: Temperature sınıfını temperature modülünden içe aktarın
# Sınıfı test edin:
# YAPILACAK: 25°C'de bir sıcaklık örneği oluşturun
temp = None # Gerçek Temperature örneği ile değiştirin
# YAPILACAK: Hem Celsius hem de Fahrenheit değerlerini yazdırın
# YAPILACAK: Şu formatı kullanın: "25.0°C is 77.0°F"
# YAPILACAK: Sıcaklığı 98.6°F olarak ayarlayın
# YAPILACAK: Dönüşümün çalıştığını onaylamak için her iki değeri de tekrar yazdırın
# YAPILACAK: Öncekiyle aynı formatı kullanınBu 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ı