Menu
CoddyTech

Property Dekoratörleri

Coddy'nin Python Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 14 / 64.

Özellik dekoratörleri, basit öznitelik söz dizimini korurken özniteliklere nasıl erişildiğini ve bunların nasıl değiştirildiğini denetlemenizi sağlar.

İşte bir özellik alıcısı olan 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 metodu çağırıyor olmasına rağmen age'e parantez kullanmadan eriştiğine dikkat et.

Değerleri ayarlarken 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ğrulamayla ayarlayabilirsin:

person = Person("Alice", 30)
person.age = 31     # Doğrulama yapan setter'ı kullanır
print(person.age)   # getter'ı kullanır

# Bu, bir hataya neden olurdu:
# person.age = -5   # ValueError: Yaş negatif olamaz

Çıktı:

31

Değerleri hesaplayan türetilmiş özellikler 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 sonucunu hesaplar

Çıktı:

15

Önemli Nokta: Özellik dekoratörleri, metotların nitelik gibi görünmesini sağlar. Getter'lar için @property, setter'lar için @attribute_name.setter kullanın. Bu, basit nitelik erişimi sözdizimini korurken veri doğrulama ve hesaplanan değerler sağlar.

challenge icon

Görev

Orta

temperature.py dosyasındaki Celsius ve Fahrenheit arasında dönüşüm yapan Temperature sınıfını tamamla. Ardından sıcaklık dönüşümlerini test etmek için bu sınıfı driver.py dosyasında kullan. Adım adım talimatlar için her iki dosyadaki TODO yorumlarını izle.

Her dönüşümü [celsius]°C is [fahrenheit]°F biçiminde yazdır; Celsius değeri verildiği haliyle, Fahrenheit değeri ise Python'ın hesapladığı haliyle olsun. Sayıları yuvarlama veya biçimlendirme. Sürücünün ürettiği iki satır şunlardır:

25°C is 77.0°F
37.0°C is 98.6°F

Kendin dene

# TODO: Temperature sınıfını temperature modülünden içe aktar

# Sınıfı test et:
# TODO: 25°C değerinde bir sıcaklık örneği oluştur
temp = None  # Gerçek bir Temperature örneğiyle değiştir

# TODO: Celsius ve Fahrenheit değerlerinin ikisini de yazdır
# TODO: Şu biçimi kullan: "25°C is 77.0°F" (iki değeri de yuvarlamadan veya biçimlendirmeden olduğu gibi yazdır)

# TODO: Sıcaklığı 98.6°F olarak ayarla

# TODO: Dönüşümün çalıştığını doğrulamak için iki değeri de tekrar yazdır
# TODO: Öncekiyle aynı biçimi kullan
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi