Menu
Coddy logo textTech

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 ** 2

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

10

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

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