Pada beberapa pertemuan yang lalu di dalam seri belajar python OOP, kita telah membahas tentang konsep pewarisan (inheritance) atau lebih tepatnya adalah “single inheritance”. Dikatakan sebagai single inheritance karena setiap kelas hanya mewarisi satu buah kelas saja.
Hal ini berbeda dengan multiple inheritance di mana satu buah kelas bisa mewarisi lebih dari satu kelas induk yang berbeda.
Bagaimana caranya? Mari kita bahas lebih lanjut.
Multiple Inheritance Pada Python
Pada bahasa pemrograman python, sebuah kelas bisa mewarisi lebih dari satu buah kelas induk yang berbeda. Kemampuan mewarisi lebih dari satu kelas ini disebut sebagai multiple inheritance.
Pada konsep multiple inheritance, sebuah kelas turunan akan memiliki semua atribut dan fitur dari semua kelas yang menjadi induknya.
Bagaimana cara membuatnya?
Kita cukup mendefinisikan masing-masing kelas induk dengan diapit tanda kurung ()
plus dipisahkan dengan tanda koma (,
).
Perhatikan contoh berikut:
class Induk1:
pass
class Induk2:
pass
class Turunan(Induk1, Induk2):
pass
Pada contoh di atas, kelas Turunan
menjadi “anak” dari kelas Induk1
dan juga kelas Induk2
.
Perhatikan ilustrasi berikut:
Kelas Turunan
mewarisi baik atribut dan fungsi dari kelas Induk1
mau pun atribut dan fungsi dari kelas Induk2
.
Multi-Level Inheritance Pada Python
Kita juga bisa melakukan proses pewarisan dari kelas yang menjadi turunan dari kelas lain. Teknik seperti ini dinamakan Multi-level inheritance. Dan tidak ada batasan seberapa banyak “level” kelas yang kita turunkan.
Perhatikan contoh berikut:
class Induk:
pass
class Turunan1(Induk):
pass
class Turunan2(Turunan1):
pass
Pada contoh di atas kelas Turunan2
mewarisi kelas Turunan1
yang mana kelas Turunan1
adalah turunan dari kelas Induk
.
Agar lebih jelas lagi, perhatikan ilustrasi berikut:
Kita bisa lihat bahwa kelas Turunan2
memiliki fitur dan atribut gabungan dari kelas Turunan1
dan kelas Induk
.
Method Resolution Order Pada Python
Sejatinya setiap objek pada python adalah objek turunan dari kelas bawaan python bernama object
. Itu adalah kelas tipe yang paling dasar.
Sehingga bisa dikatakan bahwa semua tipe data, semua objek, baik yang bawaan atau pun yang tidak, adalah sebuah instan dari kelas object
[1].
Perhatikan kode program berikut:
>>> issubclass(list, object)
True
>>> issubclass(str, object)
True
>>> issubclass(int, object)
True
>>>
Dengan memanggil fungsi issubclass
, kita bisa memeriksa apakah suatu kelas merupakan kelas turunan dari kelas yang lain. Dan bisa kita lihat pada kode program di atas, tipe data list
, str
, int
, dan lain sebagainya merupakan turunan dari kelas paling dasar di dalam python yaitu object
.
Yang jadi pertanyaan adalah:
Jika suatu kelas merupakan turunan dari lebih 1 kelas, atribut atau fungsi manakah yang akan diakses ketika kita memanggilnya?
Maka dalam skenario multiple atau multi-level inheritance, atribut/fungsi yang pertama kali dipanggil adalah dari kelasnya sendiri. Jika tidak ketemu, baru dari kelas induk yang pertama. Jika tidak ketemu, maka dari kelas induk yang kedua dan seterusnya.
Khusus untuk multiple inheritance, urutan kelas induknya adalah dari kiri ke kanan. Sehingga kelas pertama yang diturunkan adalah kelas yang paling kiri kemudian yang sebelah kanan dan seterusnya.
Urutan pemanggilan method ini dinamakan Method Resolution Order (MRO).
Untuk contoh yang pertama:
class Induk1:
pass
class Induk2:
pass
class Turunan(Induk1, Induk2):
pass
Maka urutannya adalah [Turunan
, Induk1
, Induk2
, object
].
Kita bisa buktikan dengan memanggil fungsi mro()
atau mengakses atribut __mro__
pada kelas apa pun pada python.
Perhatikan contoh berikut, kita akan mengakses Turunan.__mro__
dan juga memanggil fungsi Turunan.mro()
:
>>> Turunan.__mro__
(<class '__main__.Turunan'>,
<class '__main__.Induk1'>,
<class '__main__.Induk2'>,
<class 'object'>)
>>> Turunan.mro()
[<class '__main__.Turunan'>,
<class '__main__.Induk1'>,
<class '__main__.Induk2'>,
<class 'object'>]
>>>
Dari dua output di atas terlihat jelas bahwa urutan hirarki dari kelas yang kita bangun adalah:
- Kelas
Turunan
- Kelas
Induk1
- Kelas
Induk2
- Kelas
object
Kesimpulan
Dari pertemuan kali ini bisa kita simpulkan bahwa inheritance pada python memiliki 2 jenis:
- Single inheritance.
- dan Multiple inheritance.
Multiple inheritance sendiri bisa memiliki 2 bentuk:
- Bentuk yang pertama adalah satu objek yang mewarisi lebih dari 1 objek secara sekaligus.
- Dan bentuk yang kedua adalah satu objek yang mewarisi objek turunan dari objek yang lain (multi-level).
Selain itu, kita juga bisa simpulkan bahwa secara umum semua tipe data atau pun objek pada python merupakan kelas turunan dari kelas object
.
Dan kita bisa memeriksa urutan pewarisan suatu objek dengan mengakses atribut __mro__
atau fungsi mro()
.
Kode Program Lengkap
Untuk kode program lengkap pada pertemuan kali ini, kalian bisa mendapatkannya di sini.
Pertemuan Selanjutnya
Pada pertemuan selanjutnya insyaallah kita akan membahas tentang static variable dan instance variable pada python.
Apa itu?
Simak terus tutorial ini, ya! Terima kasih banyak.
Referensi
[1] https://www.programiz.com/python-programming/multiple-inheritance – diakses tanggal 6 Juni 2021