OOP Python: Ternyata Python Bisa Multiple Inheritance.

OOP Python Ternyata di Python Bisa Multiple Inheritance.

Apakah Multiple Inheritance itu?

Pewarisan lebih dari 1 class yang biasa disebut Multiple Intheritance adalah pewarisan yang dilakukan dari beberapa class. Pada umumnya pada bahasa pemrograman lain pewarisan hanya bisa dilakukan dari 1 buah class.

Pada bahasa pemrograman python dimungkinkan untuk melakukan inheritance lebih dari 1 class. Ilustrasi multiple inheritance terlihat pada Gambar dibawah ini.

Ilustrasi Multiple Inheritance Class

Berikut ini contoh program dari multiple inheritance.

class Ayah(object):
    def __init__(self, nama, jk):
        self.nama = nama
        self.jk = jk

    def bertani(self):
        print(self.nama + " bertani di sawah")


class Ibu (object):
    def __init__(self, nama, jk):
        self.nama = nama
        self.jk = jk

    def memasak(self):
        print(self.nama + " memasak di dapur")


class Anak(Ayah, Ibu):
    def __init__(self, nama, jk):
        super().__init__(nama, jk)


anak = Anak("Mustafa", "Pria")
anak.bertani()
anak.memasak()

Suatu hal yang perlu diketahui pada multiple inheritance adalah jika nama method yang diturunkan dari para super class memiliki nama yang sama. Method yang manakah yang akan digunakan oleh pewaris class tersebut? Misalkan contoh pada kode program berikut ini.

class Ayah(object):
    def __init__(self, nama, jk):
        self.nama = nama
        self.jk = jk

    def berbicara(self):
        print(self.nama + " berbicara dengan nada rendah")


class Ibu (object):
    def __init__(self, nama, jk):
        self.nama = nama
        self.jk = jk

    def berbicara(self):
        print(self.nama + " berbicara dengan nada tinggi")


class Anak(Ayah, Ibu):
    def __init__(self, nama, jk):
        super().__init__(nama, jk)


anak = Anak("Mustafa", "Pria")
anak.berbicara()
print(help(anak))

Maka urutan adalah bergantung pada class mana yang diturunkan terlebih dahulu, terlihat pada kode program diatas yang diturunkan terlebih dahulu adalah class Ayah, sehingga method pada class Ayah menjadi prioritas untuk dijalankan terlebih dahulu selanjutnya baru class Ibu.

Hal lain yang perlu diketahui adalah Diamond Problem, yaitu urutan pemanggilan method jika bentuk turunan class berbentuk seperti Diamond seperti ilustrasi pada gambar berikut ini.

Ilustrasi Diamond Multiple Inheritance Class

Pada kode program berikut ini akan menunjukan Diamond Multiple Inheritance.

class Leluhur(object):
    def __init__(self, nama, jk):
        self.nama = nama
        self.jk = jk

    def berbicara(self):
        print(self.nama + " berbicara dengan bahasa daerah")


class Ayah(Leluhur):
    def __init__(self, nama, jk):
        super().__init__(nama, jk)

    def berbicara(self):
        print(self.nama + " berbicara dengan nada rendah")


class Ibu (Leluhur):
    def __init__(self, nama, jk):
        super().__init__(nama, jk)

    def berbicara(self):
        print(self.nama + " berbicara dengan nada tinggi")


class Anak(Ibu, Ayah):
    def __init__(self, nama, jk):
        super().__init__(nama, jk)


anak = Anak("Mustafa", "Pria")
anak.berbicara()
print(help(anak))

Untuk mengetahui urutan pemanggilan method maka digunakan method help(). Maka keluaran pada kode program diatas adalah:

 p, li { white-space: pre-wrap; } 
 
Mustafa berbicara dengan nada tinggi
 Help on Anak in module __main__ object:
 
 class Anak(Ibu, Ayah)
  |  Anak(nama, jk)
 
 C:\Users\thinkcentre\Dropbox\myPython\OOP_UMP>python diamond_inheritance.py
 Mustafa berbicara dengan nada tinggi
 Help on Anak in module __main__ object:
 
 class Anak(Ibu, Ayah)
  |  Anak(nama, jk)
  |
  |  Method resolution order:
  |      Anak
  |      Ibu
  |      Ayah
  |      Leluhur
  |      builtins.object
  |
  |  Methods defined here:
  |
  |  __init__(self, nama, jk)
  |      Initialize self.  See help(type(self)) for accurate signature.
  |
  |  ----------------------------------------------------------------------
  |  Methods inherited from Ibu:
  |
  |  berbicara(self)
  |
  |  ----------------------------------------------------------------------
  |  Data descriptors inherited from Leluhur:
  |
  |  __dict__
  |      dictionary for instance variables (if defined)
  |
  |  __weakref__
  |      list of weak references to the object (if defined)

Terlihat urutan pemanggilan method berdasarkan urutan class Anak, Ibu, Ayah dan Leluhur.

Be the first to comment

Leave a Reply

Your email address will not be published.


*