Posted At: 27 Jun 2020 12:03:00
Enkapsulasi Pada Python
Setelah mempelajari modul ini diharapkan pembaca memahami konsep enkaspsulasi pada bahasa pemrograman Python.
Enkapsulasi (encapsulation) adalah sebuah metoda untuk mengatur component class dengan cara menyembunyikan alur kerja dari class tersebut. Component class yang dimaksud adalah property dan method. Dengan enkapsulasi, kita bisa membuat pembatasan akses kepada property dan method, sehingga hanya property dan method tertentu saja yang bisa diakses dari luar class. Enkapsulasi juga dikenal dengan istilah 'information hiding'.
Pada konsep enkapsulasi semua property dalam bentuk private. Untuk mengakses dan merubah property diperlukan method getter dan setter. Misalkan kita buat contoh class Hero, sebagai berikut:
class Hero(object):
__jumlah = 0
def __init__(self, nama, jenis, kuat, serang, tahan):
# semua property dalam bentuk private
self.__nama = nama
self.__jenis = jenis
self.__kuat = kuat
self.__serang = serang
self.__tahan = tahan
Hero.__jumlah += 1
# method getter
def getNama(self):
return self.__nama
def getJenis(self):
return self.__jenis
def getKuat(self):
return self.__kuat
def getSerang(self):
return self.__serang
def getTahan(self):
return self.__tahan
# method setter
def setNama(self, nama):
self.__nama = nama
def setJenis(self, jenis):
self.__jenis = jenis
def setKuat(self, kuat):
self.__kuat = kuat
def setSerang(self, serang):
self.__serang = serang
def setTahan(self, tahan):
self.__tahan = tahan
semar = Hero("Semar", "Hulubalang", 100, 15, 5)
cepot = Hero("Cepot", "Prajurit", 100, 8, 3)
print(semar.getNama())
print(semar.getKuat())
semar.setKuat(90)
print(semar.getKuat())
Untuk penanganan enkapsulasi lebih lanjut maka bisa menggunakan decorator. Adapun decorator yang digunakan adalah staticmethod, classmethod, property, getter, setter dan deleter. Contoh kode penggunaaan decorator staticmethod dan classmethod.
class Hero(object):
# class variable
__jumlah = 0
def __init__(self, nama, jenis):
self.nama = nama
self.jenis = jenis
Hero.__jumlah += 1
# method kepunyaaan class
def getJumlah():
return Hero.__jumlah
# penggunaan decorator staticmethod
@staticmethod
def getJumlahHero():
return Hero.__jumlah
semar = Hero("Semar", "Penyihir")
print(Hero.getJumlah())
print(semar.getJumlahHero())
cepot = Hero("Cepot", "Hulubalang")
print(Hero.getJumlahHero())
print(cepot.getJumlahHero())
Berikut ini contoh kode penggunaan decorator classmethod:
class Hero(object):
# class variable
__jumlah = 0
def __init__(self, nama, jenis):
self.nama = nama
self.jenis = jenis
Hero.__jumlah += 1
# penggunaan decorator classmethod
# pada decorator classmethod bisa menambahkan parameter
@classmethod
def getJumlah(cls):
return Hero.__jumlah
semar = Hero("Semar", "Penyihir")
cepot = Hero("Cepot", "Hulubalang")
print(Hero.getJumlah())
print(semar.getJumlah())
print(cepot.getJumlah())
Berikut ini contoh kode penggunaan decorator property, getter, setter dan deleter:
class Hero(object):
def __init__(self, nama, jenis, kuat):
self.__nama = nama
self.__jenis = jenis
self.__kuat = kuat
@property
def info(self):
return (self.__nama + " - " + self.__jenis + " - " + str(self.__kuat))
@property
def nama(self):
pass
@nama.getter
def nama(self):
return self.__nama
@nama.setter
def nama(self, input):
self.__nama = input
@property
def jenis(self):
pass
@jenis.getter
def jenis(self):
return self.__jenis
@jenis.setter
def jenis(self, input):
self.__jenis = input
@property
def kuat(self):
pass
@kuat.getter
def kuat(self):
return self.__kuat
@kuat.setter
def kuat(self, input):
self.__kuat = input
semar = Hero("Semar", "Penyihir", 100)
print(semar.info)
semar.nama = "Semar Mendem"
semar.jenis = "Jawara"
semar.kuat = 150
print(semar.info)