Enkapsulasi Pada Python

Posted At: 27 Jun 2020 12:03:00

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.

staticmethod

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())

classmethod

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())

property, getter, setter dan deleter

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)
Yulrio Brianorman
Blogger, pemiliki Onestring Lab, menulis artikel terkait teknologi informasi dan pendidikan. Web Developer, berpengalaman lebih dari 20 tahun mengembangkan berbagai aplikasi dan sistem informasi. Kerjasama : kontak saya.