Menu
CoddyTech

Modifier Akses

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Python di Coddy. Pelajaran 29 dari 64.

Modifier akses mengatur visibilitas atribut dan method class. Python menggunakan konvensi penamaan, bukan kata kunci, untuk mengontrol akses.

Berikut contoh akses publik (tanpa awalan):

class Person:
    def __init__(self):
        self.name = "Coddy"      # Atribut publik
        
    def greet(self):             # method publik
        return f"Hello, I'm {self.name}"

Akses anggota publik dari mana saja:

person = Person()
print(person.name)           # Coddy
print(person.greet())        # Halo, saya Coddy

Berikut contoh akses terlindungi (garis bawah tunggal):

class Employee:
    def __init__(self):
        self._salary = 50000     # Atribut terlindungi
    
    def _calculate_bonus(self):  # Method terlindungi
        return self._salary * 0.1

    def show_bonus(self):
        return self._calculate_bonus()  # Boleh digunakan di dalam class

Akses anggota terlindungi (berfungsi, tetapi tidak disarankan):

employee = Employee()
print(employee._salary)      # 50000, bisa digunakan tetapi tidak disarankan
print(employee.show_bonus()) # 5000.0, cara yang tepat

Berikut contoh akses privat (garis bawah ganda):

class User:
    def __init__(self):
        self.__password = "secure123"   # Atribut privat
        
    def __encrypt(self, data):          # method privat
        return f"Encrypted: {data}"
        
    def verify(self, input_password):
        # Anggota privat dapat diakses di dalam class
        return input_password == self.__password

Gunakan anggota privat dengan benar:

user = User()
print(user.verify("secure123"))  # True, menggunakan method publik
# print(user.__password)         # AttributeError, tidak bisa diakses secara langsung

Output:

Coddy
Hello, I'm Coddy
50000
5000.0
True

Poin penting: modifier akses Python adalah konvensi penamaan: tanpa awalan = public (dapat diakses dari mana saja), satu garis bawah = protected (untuk penggunaan internal), dua garis bawah = private (hanya di dalam class). Konvensi ini membantu menetapkan batasan yang jelas dan mencegah penyalahgunaan internal class secara tidak sengaja.

challenge icon

Tantangan

Sedang

Dalam tantangan ini, kamu akan mengimplementasikan class FileManager yang menunjukkan pengubah akses Python (publik, terlindungi, dan privat) sambil merasakan manfaat pengujian menyeluruh.

Edit filemanager.py untuk mengimplementasikan class FileManager sesuai komentar TODO. File ini berisi petunjuk terperinci untuk mengimplementasikan:

  • method publik untuk operasi file
  • method terlindungi (dengan awalan garis bawah tunggal)
  • method privat (dengan awalan garis bawah ganda)
  • interaksi method yang menunjukkan enkapsulasi

Coba sendiri

from file_manager import FileManager

# Penangan kasus uji yang menyeluruh
test_case = input()

if test_case == "basic_test":
    # Buat instance FileManager
    manager = FileManager()
    # Panggil method read_file
    print(manager.read_file("example.txt"))
    # Panggil method get_file_content
    print(manager.get_file_content("example.txt"))

elif test_case == "protected_access":
    # Buat instance FileManager
    manager = FileManager()
    # Coba panggil method protected
    # Method protected dapat diakses, tetapi ditujukan untuk penggunaan internal
    print(manager._check_permissions("example.txt"))
    print("Note: Protected methods are accessible but intended for internal use only")

elif test_case == "private_access":
    # Buat instance FileManager
    manager = FileManager()
    try:
        # Coba panggil method private secara langsung
        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")
    
    # Akses menggunakan bentuk name-mangled
    print(manager._FileManager__decrypt_content("some content"))
    print("Note: Accessed private method using name-mangled form")

elif test_case == "method_chaining":
    # Buat instance FileManager
    manager = FileManager()
    # Tunjukkan bagaimana get_file_content memanggil method protected dan private secara internal
    print("Calling get_file_content which internally uses protected and private methods:")
    print(manager.get_file_content("example.txt"))

elif test_case == "multiple_files":
    # Buat instance FileManager
    manager = FileManager()
    # Proses beberapa file
    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":
    # Buat instance FileManager
    manager = FileManager()
    # Tunjukkan proses name mangling
    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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Python online