Merhaba arkadaşlar, bu yazımızda Python derslerinin bu serisinde yirmi üçüncü ders olarak Python Encapsulation (Kapsülleme) konusuna değinmeye çalışacağım. Umarım sizler için faydalı bir yazı olur. İsterseniz hemen başlayalım.
Python Kapsülleme Nedir?
Kapsülleme (Encapsulation), nesne tabanlı programlama dillerinde bir nesnenin dahili özelliklerini ve davranışlarını dışarıdan erişimin engellenmesini sağlar. Bu, nesnenin güvenliğini ve bütünlüğünü koruyan bir yapıdır. Kapsülleme, sınıf üyelerinin (nitelikleri ve metotları) dışarıdan erişiminin sınırlandırılmasını sağlar.
Python’da, kapsülleme için özel metotlar (private metodlar) ve özel nitelikler (private attributes) kullanılır. Özel metotlar ve nitelikler, dahili özellikleri ve davranışları tanımlamak için kullanılır ve dışarıdan erişim engellenir. Özel metotlar ve nitelikler, sınıf içinde erişilebilir ancak dışarıdan erişilemez.
Python’da, özel metotlar ve nitelikler, “__” (double underscore) ile başlar. Örneğin, “__private_method” ve “__private_attribute” gibi.
class MyClass: def __init__(self): self.__private_attribute = "private" def __private_method(self): print("This is a private method") def public_method(self): print(self.__private_attribute) self.__private_method()
Bu örnekte, “MyClass” sınıfı içinde “__private_attribute” niteliği ve “__private_method” metodu tanımlanmıştır. Bu nitelik ve metot, sınıf içinde erişilebilir ama dışarıdan erişilemez. “public_method” metodu ise, dışarıdan erişilebilir ve “__private_attribute” niteliğine ve “__private_method” metoduna erişim sağlar.
Kapsülleme, nesnelerin dahili özelliklerini ve davranışlarını dışarıdan erişimin engellenmesi ile nesnenin güvenliğini ve bütünlüğünü koruma amacını taşır. Ayrıca, sistemdeki değişikliklerin yalnızca belirli bir bölümün etkilenmesini sağlar.
Python Kapsülleme (Encaplusation) Kullanımı
Python’da kapsülleme (encapsulation), sınıf üyelerinin erişim düzeylerini belirlemek için kullanılır. Özel metotlar ve nitelikler dahilinde, sınıfın dahili özellikleri ve davranışlarını dışarıdan erişimin engellenmesini sağlar.
Python’da kapsülleme kullanımı için aşağıdaki adımlar takip edilir:
- Sınıf niteliklerini tanımlayın ve dahili özellikleri için özel nitelikler oluşturun. Özel nitelikler, “__” (double underscore) ile başlar. Örneğin, “__private_attribute”
class MyClass: def __init__(self): self.__private_attribute = "private"
- Sınıf metotlarını tanımlayın ve dahili davranışları için özel metotlar oluşturun. Özel metotlar da “__” ile başlar. Örneğin, “__private_method”
class MyClass: def __init__(self): self.__private_attribute = "private" def __private_method(self): print("This is a private method")
- Dışarıdan erişim için public metodlar oluşturun ve özel niteliklere ve metotlara erişim sağlayın.
class MyClass: def __init__(self): self.__private_attribute = "private" def __private_method(self): print("This is a private method") def public_method(self): print(self.__private_attribute) self.__private_method()
- Sınıfın nesnelerini oluşturun ve erişim düzeylerini test edin. Özel nitelik ve metotlar dışarıdan erişilemezken, public metotlar aracılığıyla erişim sağlanabilir.
# create object obj = MyClass() # access private attribute and method through public method obj.public_method() # Output: private # Output: This is a private method # try to access private attribute and method directly (will raise an error) print(obj.__private_attribute) # Output: AttributeError: 'MyClass' object has no attribute '__private_attribute' obj.__private_method() # Output: AttributeError: 'MyClass' object has no attribute '__private_method'
Bu şekilde kapsülleme (encapsulation) kullanımını gerçekleştirebilirsiniz. Özel nitelikler ve metotlar, sadece sınıf içinde erişilebilirken, public metotlar aracılığıyla dışarıdan erişim sağlanabilir. Bu sayede, nesnenin dahili özellikleri ve davranışları dışarıdan erişimin engellenir ve nesnenin güvenliği ve bütünlüğü korunur.
Kapsüllenmiş Verilere Dışarıdan Erişim
Kapsüllenmiş verilere dışarıdan erişim, Python’da getter ve setter metotları kullanılarak gerçekleştirilir. Getter metotlar, kapsüllenmiş niteliklerin değerlerini döndürürken, setter metotlar ise kapsüllenmiş niteliklere değer atamak için kullanılır.
Aşağıdaki örnekte, MyClass
sınıfında __private_attribute
adlı özel nitelik tanımlanmıştır. Dışarıdan bu nitelik direk erişilemez, ancak get_private_attribute()
ve set_private_attribute()
metotları aracılığıyla erişim sağlanabilir.
class MyClass: def __init__(self): self.__private_attribute = "private" def get_private_attribute(self): return self.__private_attribute def set_private_attribute(self, value): self.__private_attribute = value # create object obj = MyClass() # access private attribute through getter method print(obj.get_private_attribute()) # Output: private # set private attribute through setter method obj.set_private_attribute("new value") # access private attribute through getter method again print(obj.get_private_attribute()) # Output: new value
Bu şekilde, kapsüllenmiş niteliklere dışarıdan erişim sağlanırken aynı zamanda niteliklere direk erişim engellenir. Getter ve setter metotlar aracılığıyla niteliklere erişim sağlandığından, niteliklerin değerleri kontrol edilir ve gerektiğinde hata önlemleri alınabilir.
Kullanıma Örnek
Evet, aşağıdaki örnekte, “Person” sınıfı oluşturuldu ve bu sınıfın özel nitelikleri (__name
ve __age
) ve özel metodları (__get_age()
ve __set_age()
) tanımlandı. Dışarıdan erişim için “get_name()” ve “set_name()” metotları ile “get_age()” ve “set_age()” metotları tanımlandı.
class Person: def __init__(self, name, age): self.__name = name self.__age = age def get_name(self): return self.__name def set_name(self, name): self.__name = name def __get_age(self): return self.__age def __set_age(self, age): if age < 0: print("Age can not be negative") else: self.__age = age def get_age(self): return self.__get_age() def set_age(self, age
Arkadaşlar bu Python Encapsulation (Kapsülleme) adlı yazımızın da sonuna gelmiş bulunmaktayız. Umarım faydalı olmuştur.