Menu
Coddy logo textTech

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ı:

30

Aslı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 = value

Artı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ı:

31

Değ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ı:

15

Anahtar 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.

challenge icon

Görev

Orta

temperature.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 yok

Doğ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ır

Değ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

Kendin 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ın
quiz iconKendini test et

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