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 CoddyBerikut 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 classAkses 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 tepatBerikut 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.__passwordGunakan anggota privat dengan benar:
user = User()
print(user.verify("secure123")) # True, menggunakan method publik
# print(user.__password) # AttributeError, tidak bisa diakses secara langsungOutput:
Coddy
Hello, I'm Coddy
50000
5000.0
TruePoin 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.
Tantangan
SedangDalam 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")Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass vs objectParameter selfmethodAtributMethod Konstruktor (__init__)Rangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan DasarFungsi super()Penimpaan MethodPewarisan BergandaUrutan Resolusi MethodRingkasan: Hierarki Karyawan5Polimorfisme
Meninjau Ulang Method OverridingDuck Typingclass dan method AbstrakDesain InterfaceRingkasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanMixinsMetode Statis dan Metode ClassDecorator ClassPengelola Konteks11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola Composite3Property class
Variabel instance vs variabel classDekorator propertyAtribut privatRangkuman: Pengelola Rekening Bank6Enkapsulasi
Anggota Public, Protected, PrivateModifier AksesPenyembunyian InformasiDecorator Property Tingkat LanjutUlasan: Sistem Catatan Siswa12Proyek: Manajemen Perpustakaan
Ikhtisar Proyekclass Buku dan PenggunaSistem PeminjamanFitur PencarianAntarmuka AdminPengujian dan IntegrasiLatihan sendiri: Compiler Python online