Multiple Inheritance Pada Python

Posted At: 28 Jun 2020 09:42:00

Setelah mempelajari modul ini diharapkan pembaca memahami konsep multiple inheritance pada bahasa pemrograman Python.

Pada bahasa pemrograman python dimungkinkan untuk melakukan inheritance lebih dari 1 class. Ilustrasi multiple inheritance terlihat pada gambar berikut ini:

Multiple Inheritance  Class

Multiple Inheritance Class

Berikut ini contoh kode 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:

Multiple Diamond Inheritance  Class

Multiple Diamond Inheritance Class

Pada Kode Program berikut ini akan menunjukan Diamond 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(). Keluaran pada kode program adalah:

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 \textit{class} Anak, Ibu, Ayah dan Leluhur.

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.