Getter: Nesne Yönelimli Programlama (OOP) içinde bir sınıfın özel (private) niteliklerine erişmek için kullanılan yöntemlerdir.
Setter: OOP özelliğinde, bir sınıftaki özel niteliklere değer atamak için kullanılan yöntemlerdir.
Özel Nitelik - Kapsülleme
Python'da özel niteliklere veya özel yöntemlere aşina değilseniz, bu DataCamp makalesini okuyun.
Python içinde özel bir niteliği nasıl uygulayabileceğinize bakalım.
classSampleClass:def__init__(self, a):## private varibale or property in Python
self.__a = a
## getter method to get the properties using an objectdefget_a(self):return self.__a
## setter method to change the value 'a' using an objectdefset_a(self, a):
self.__a = a
Altyapı:
SampleClass'ın üç yöntemi bulunur.
__init__:- Bir sınıfın niteliklerini veya özelliklerini başlatmak için kullanılır.
__a:- Bu özel bir niteliktir.
get_a:- Özel nitelik a'nın değerini almak için kullanılır.
set_a:- Bir sınıfın nesnesini kullanarak a'nın değerini atamak için kullanılır.
Python içinde özel değişkenlere doğrudan erişemezsiniz. Bu nedenle bir getter yöntemi uygularsınız.
Sınıfın nasıl çalıştığına bakalım.
## creating an object
obj = SampleClass(10)## getting the value of 'a' using get_a() methodprint(obj.get_a())## setting a new value to the 'a' using set_a() method
obj.set_a(45)print(obj.get_a())Altyapı:
Bu şekilde Python'da özel nitelikleri, getter ve setterları uygularsınız. Aynı süreç Java'da da izlenirdi. Şimdi aynı uygulamayı daha Pythonic bir şekilde yazalım.
classPythonicWay:def__init__(self, a):
self.a = a
Altyapı:
Niteliklere erişmek veya onları değiştirmek için getter, setter yöntemlerine ihtiyacınız yoktur. Niteliklerin adıyla doğrudan erişebilirsiniz.
Görelim.
## Creating an object for the 'PythonicWay' class
obj = PythonicWay(100)print(obj.a)Altyapı:
SampleClass özel nitelikleri ve yöntemleri gizler. OOP'un kapsülleme özelliğini uygular.
PythonicWay veriyi gizlemez. Herhangi bir kapsülleme özelliği uygulamaz.
Hangisini kullanmak daha iyidir?
İhtiyacımıza bağlıdır. Özel niteliklere ve yöntemlere ihtiyacınız varsa, setter ve getter yöntemlerini kullanarak bir sınıf uygulayabilirsiniz; aksi halde normal yolu kullanırsınız.
Property
Şimdi, SampleClass içinde bir niteliğin değerini atamak için bazı koşullar koymak istediğinizde ne olur?
Diyelim ki, verdiğimiz değer çift ve pozitifse niteliğe atayalım; aksi halde değeri 2 yapalım.
Bunu, SampleClass içindeki set_a() yöntemini değiştirerek uygulayalım.
classSampleClass1:def__init__(self, a):## calling the set_a() method to set the value 'a' by checking certain conditions
self.set_a(a)## getter method to get the properties using an objectdefget_a(self):return self.__a
## setter method to change the value 'a' using an objectdefset_a(self, a):## condition to check whether 'a' is suitable or notif a >0and a %2==0:
self.__a = a
else:
self.__a =2Altyapı:
Bir nesne oluşturarak sınıfı kontrol edelim.
## creating an object for the class 'SampleClass1'
obj = SampleClass1(16)print(obj.get_a())Altyapı:
Yukarıdaki sınıfı @property dekoratörünü kullanarak nasıl uygulayacağımıza bakalım.
classProperty:def__init__(self, var):## initializing the attribute
self.a = var
@propertydefa(self):return self.__a
## the attribute name and the method name must be same which is used to set the value for the attribute@a.setterdefa(self, var):if var >0and var %2==0:
self.__a = var
else:
self.__a =2Altyapı:
@property, herhangi bir getter yöntemi kullanmadan özel bir niteliğin değerini almak için kullanılır. Özel değişkeni döndürdüğümüz yöntemin başına @property satırını koymamız gerekir.
Özel değişkenin değerini atamak için, yöntem adının önünde @method_name.setter kullanırız. Bunu bir setter olarak kullanmalıyız.
Property sınıfının dekoratörlerin düzgün çalışıp çalışmadığını test edelim.
## creating an object for the class 'Property'
obj = Property(23)print(obj.a)Altyapı:
@a.setter, yöntemde belirttiğimiz koşulları kontrol ederek a'nın değerini atar. property'i kullanmanın bir başka yolu da...
classAnotherWay:def__init__(self, var):## calling the set_a() method to set the value 'a' by checking certain conditions
self.set_a(var)## getter method to get the properties using an objectdefget_a(self):return self.__a
## setter method to change the value 'a' using an objectdefset_a(self, var):## condition to check whether var is suitable or notif var >0and var %2==0:
self.__a = var
else:
self.__a =2
a =property(get_a, set_a)Altyapı:
Tüm getter ve setter yöntemlerini property'ye aktarın ve bir sınıf niteliği olarak kullanacağınız değişkene atayın.
## creating an object for the 'AnotherWay' class
obj = AnotherWay(28)print(obj.a)Altyapı:
setter ve getter yöntemlerini gizlemek için özel yapın. Hadi yapalım.
classFinalClass:def__init__(self, var):## calling the set_a() method to set the value 'a' by checking certain conditions
self.__set_a(var)## getter method to get the properties using an objectdef__get_a(self):return self.__a
## setter method to change the value 'a' using an objectdef__set_a(self, var):## condition to check whether var is suitable or notif var >0and var %2==0:
self.__a = var
else:
self.__a =2
a =property(__get_a, __set_a)Altyapı:
Düzgün çalışıp çalışmadığını kontrol edelim.
## creating an object for the 'AnotherWay' class
obj = FinalClass(12)print(obj.a)Altyapı:
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Getter ve Setter nedir?
Özel Nitelik - Kapsülleme
Python'da özel niteliklere veya özel yöntemlere aşina değilseniz, bu DataCamp makalesini okuyun.
Python içinde özel bir niteliği nasıl uygulayabileceğinize bakalım.
SampleClass'ın üç yöntemi bulunur.
__init__:- Bir sınıfın niteliklerini veya özelliklerini başlatmak için kullanılır.
Python içinde özel değişkenlere doğrudan erişemezsiniz. Bu nedenle bir getter yöntemi uygularsınız.
Sınıfın nasıl çalıştığına bakalım.
Bu şekilde Python'da özel nitelikleri, getter ve setterları uygularsınız. Aynı süreç Java'da da izlenirdi. Şimdi aynı uygulamayı daha Pythonic bir şekilde yazalım.
Niteliklere erişmek veya onları değiştirmek için getter, setter yöntemlerine ihtiyacınız yoktur. Niteliklerin adıyla doğrudan erişebilirsiniz.
Görelim.
Yukarıdaki iki sınıf arasındaki fark nedir?
Hangisini kullanmak daha iyidir?
Property
Şimdi, SampleClass içinde bir niteliğin değerini atamak için bazı koşullar koymak istediğinizde ne olur?
Diyelim ki, verdiğimiz değer çift ve pozitifse niteliğe atayalım; aksi halde değeri 2 yapalım.
Bunu, SampleClass içindeki set_a() yöntemini değiştirerek uygulayalım.
Bir nesne oluşturarak sınıfı kontrol edelim.
Yukarıdaki sınıfı @property dekoratörünü kullanarak nasıl uygulayacağımıza bakalım.
@property, herhangi bir getter yöntemi kullanmadan özel bir niteliğin değerini almak için kullanılır. Özel değişkeni döndürdüğümüz yöntemin başına @property satırını koymamız gerekir.
Özel değişkenin değerini atamak için, yöntem adının önünde @method_name.setter kullanırız. Bunu bir setter olarak kullanmalıyız.
Property sınıfının dekoratörlerin düzgün çalışıp çalışmadığını test edelim.
@a.setter, yöntemde belirttiğimiz koşulları kontrol ederek a'nın değerini atar. property'i kullanmanın bir başka yolu da...
Tüm getter ve setter yöntemlerini property'ye aktarın ve bir sınıf niteliği olarak kullanacağınız değişkene atayın.
setter ve getter yöntemlerini gizlemek için özel yapın. Hadi yapalım.
Düzgün çalışıp çalışmadığını kontrol edelim.
Sonuç
Artık Python'da kapsüllemeyi nasıl uygulayabileceğinizi ve setter, getter ile property arasındaki farkı gördünüz.
Python'a yeniyseniz, DataCamp'in ücretsiz Introduction to Python kursunu almanızı öneririm.
Makaleyle ilgili sorularınız varsa lütfen yorum kısmında belirtin. Mutlu Kodlamalar!