Menu
Coddy logo textTech

Erişim Belirleyiciler

Coddy'nin Python Journey'sinin Nesne Yönelimli Programlama 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}"

Genel üyeler her yerden erişilebilir:

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ı uygundur

Korumalı ü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 üyeleri doğru şekilde kullanın:

user = User()
print(user.verify("secure123"))  # True - public method kullanarak
# print(user.__password)         # AttributeError - doğrudan erişilemez

Çıktı:

Coddy
Hello, I'm Coddy
50000
5000.0
True

Temel Nokta: Python erişim belirleyicileri adlandırma kurallarıdır: ön ek yok = public (her yerden erişilebilir), tek alt çizgi = protected (dahili kullanım), çift alt çizgi = private (yalnızca sınıf içinde). Bunlar net sınırlar oluşturmaya ve sınıf iç yapısının yanlışlıkla kötüye kullanılmasını önlemeye yardımcı olur.

challenge icon

Görev

Orta

Bu meydan okumada, kapsamlı testin avantajlarını deneyimlerken Python'ın erişim belirleyicilerini (public, protected ve private) gösteren bir FileManager sınıfı uygulayacaksın.

filemanager.py dosyasını, TODO yorumlarını izleyerek FileManager sınıfını uygulayacak şekilde düzenle. Dosya, aşağıdakilerin uygulanmasına ilişkin ayrıntılı talimatlar içerir:

  • Dosya işlemleri için public metotlar
  • Korunan metotlar (tek alt çizgi ön ekiyle)
  • Özel metotlar (çift alt çizgi ön ekiyle)
  • Kapsüllemeyi gösteren metot etkileşimleri

Kendin 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")
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