Erişim Belirleyiciler
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 29 / 64.
Erişim belirleyicileri, sınıf özniteliklerinin ve yöntemlerinin görünürlüğünü kontrol eder. Python, erişim kontrolü için anahtar kelimeler yerine adlandırma kurallarını kullanır.
İşte genel erişime (ön ek yok) bir örnek:
class Person:
def __init__(self):
self.name = "Coddy" # Public attribute
def greet(self): # Public method
return f"Hello, I'm {self.name}"Public üyelere her yerden erişin:
person = Person()
print(person.name) # Coddy
print(person.greet()) # Merhaba, ben Coddyİşte korumalı erişime (tek alt çizgi) bir örnek:
class Employee:
def __init__(self):
self._salary = 50000 # Korumalı öznitelik
def _calculate_bonus(self): # Korumalı metot
return self._salary * 0.1
def show_bonus(self):
return self._calculate_bonus() # Sınıf içinde kullanımı uygundurKorumalı üyelere erişim (çalışır ancak önerilmez):
employee = Employee()
print(employee._salary) # 50000 - çalışır ancak tavsiye edilmez
print(employee.show_bonus()) # 5000.0 - doğru yöntemİşte özel erişime (çift alt çizgi) bir örnek:
class User:
def __init__(self):
self.__password = "secure123" # Özel öznitelik
def __encrypt(self, data): # Özel metot
return f"Encrypted: {data}"
def verify(self, input_password):
# Özel üyelere sınıf içinden erişilebilir
return input_password == self.__passwordÖzel (private) üyeleri doğru şekilde kullanın:
user = User()
print(user.verify("secure123")) # True - genel (public) metot kullanılıyor
# print(user.__password) # AttributeError - doğrudan erişilemezÇıktı:
Coddy
Hello, I'm Coddy
50000
5000.0
TrueÖnemli Nokta: Python erişim belirleyicileri (access modifiers) isimlendirme kurallarıdır: önek yok = public (her yerden erişilebilir), tek alt çizgi = protected (dahili kullanım), çift alt çizgi = private (sadece sınıf içi). Bunlar net sınırlar oluşturmaya yardımcı olur ve sınıfın dahili bileşenlerinin yanlışlıkla hatalı kullanımını önlemede yardımcı olur.
Görev
OrtaBu meydan okumada, kapsamlı testlerin avantajlarını deneyimlerken Python'ın erişim belirleyicilerini (public, protected ve private) gösteren bir FileManager sınıfı uygulayacaksınız.
FileManager sınıfını uygulamak için TODO yorumlarını takip ederek filemanager.py dosyasını düzenleyin. Dosya, şunları uygulamak için ayrıntılı talimatlar içerir:
- Dosya işlemleri için public metotlar
- Protected metotlar (tek alt çizgi öneki ile)
- Private metotlar (çift alt çizgi öneki ile)
- Kapsüllemeyi (encapsulation) gösteren metot etkileşimleri
Kopya kağıdı
Python, erişim kontrolü için isimlendirme kurallarını kullanır:
Genel erişim (Public access) (ön ek yok) - her yerden erişilebilir:
class Person:
def __init__(self):
self.name = "Coddy" # Genel öznitelik
def greet(self): # Genel metot
return f"Hello, I'm {self.name}"
person = Person()
print(person.name) # Coddy
print(person.greet()) # Hello, I'm CoddyKorumalı erişim (Protected access) (tek alt çizgi) - dahili kullanım, dışarıdan kullanımı önerilmez:
class Employee:
def __init__(self):
self._salary = 50000 # Korumalı öznitelik
def _calculate_bonus(self): # Korumalı metot
return self._salary * 0.1
employee = Employee()
print(employee._salary) # Çalışır ancak önerilmezÖzel erişim (Private access) (çift alt çizgi) - sadece sınıf içi:
class User:
def __init__(self):
self.__password = "secure123" # Özel öznitelik
def __encrypt(self, data): # Özel metot
return f"Encrypted: {data}"
def verify(self, input_password):
return input_password == self.__password
user = User()
print(user.verify("secure123")) # True - genel metot kullanılıyor
# print(user.__password) # AttributeError - doğrudan erişilemezKendin dene
from file_manager import FileManager
# Kapsamlı test durumu işleyicisi
test_case = input()
if test_case == "basic_test":
# Bir FileManager örneği oluştur
manager = FileManager()
# read_file metodunu çağır
print(manager.read_file("example.txt"))
# get_file_content metodunu çağır
print(manager.get_file_content("example.txt"))
elif test_case == "protected_access":
# Bir FileManager örneği oluştur
manager = FileManager()
# Korumalı (protected) metodu çağırmayı dene
# Korumalı metodlara erişilebilir ancak dahili kullanım için tasarlanmıştır
print(manager._check_permissions("example.txt"))
print("Note: Protected methods are accessible but intended for internal use only")
elif test_case == "private_access":
# Bir FileManager örneği oluştur
manager = FileManager()
try:
# Özel (private) metodu doğrudan çağırmayı dene
print(manager.__decrypt_content("some content"))
except AttributeError as e:
print(f"Error: {e}")
print("Private methods are name-mangled and cannot be accessed directly")
# İsim karıştırma (name-mangled) formunu kullanarak eriş
print(manager._FileManager__decrypt_content("some content"))
print("Note: Accessed private method using name-mangled form")
elif test_case == "method_chaining":
# Bir FileManager örneği oluştur
manager = FileManager()
# get_file_content'in dahili olarak hem korumalı hem de özel metodları nasıl çağırdığını göster
print("Calling get_file_content which internally uses protected and private methods:")
print(manager.get_file_content("example.txt"))
elif test_case == "multiple_files":
# Bir FileManager örneği oluştur
manager = FileManager()
# Birden fazla dosyayı işle
files = ["document.txt", "image.jpg", "data.csv"]
for file in files:
print(f"\
Processing {file}:")
print(manager.read_file(file))
print(manager.get_file_content(file))
elif test_case == "name_mangling":
# Bir FileManager örneği oluştur
manager = FileManager()
# İsim karıştırmayı (name mangling) göster
print("Python's name mangling for private methods:")
print("Attempting direct access would fail with AttributeError")
print("Using mangled name:")
print(manager._FileManager__decrypt_content("private data"))
print("\
Name mangling is Python's mechanism to prevent accidental access")
print("It renames __method to _ClassName__method internally")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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı