Inheritance dan Polymorphism di Python

Post image

Inheritance (pewarisan) dan polymorphism (polimorfisme) adalah dua konsep utama dalam OOP yang membuat kode lebih fleksibel dan mudah dikembangkan. Dengan memahami kedua konsep ini, kamu bisa membuat program Python yang lebih modular, reusable, dan scalable. Artikel ini akan membahas secara mendalam tentang inheritance dan polymorphism, lengkap dengan contoh, studi kasus, best practice, dan tips untuk pemula.

Apa Itu Inheritance?

Inheritance adalah kemampuan sebuah class (child/anak) untuk mewarisi atribut dan method dari class lain (parent/induk). Dengan inheritance, kamu bisa membuat class baru tanpa harus menulis ulang kode yang sama. Konsep ini sangat penting untuk menghindari duplikasi kode dan memudahkan pengembangan aplikasi besar.

Analogi Sederhana

Bayangkan kamu punya class Hewan sebagai induk, lalu membuat class Kucing dan Anjing sebagai anak. Semua hewan pasti punya nama dan bisa bersuara, tapi suara kucing dan anjing berbeda. Dengan inheritance, kamu cukup mendefinisikan atribut dan method umum di class induk, lalu class anak bisa menambah atau mengubah perilaku sesuai kebutuhan.

Contoh Inheritance

class Hewan:
    def __init__(self, nama):
        self.nama = nama

    def suara(self):
        print("Hewan bersuara...")

class Kucing(Hewan):
    def suara(self):
        print(f"{self.nama} : Meong!")

class Anjing(Hewan):
    def suara(self):
        print(f"{self.nama} : Guk!")

k1 = Kucing("Mimi")
a1 = Anjing("Doggy")

k1.suara()
a1.suara()
Mimi : Meong!
Doggy : Guk!

Penjelasan:

  • Kucing dan Anjing mewarisi dari Hewan.
  • Method suara di-overwrite sesuai jenis hewan.
  • Atribut nama diwariskan dari class induk.

Inheritance Bertingkat (Multi-level Inheritance)

Inheritance bisa bertingkat, misal class C mewarisi dari class B, dan class B mewarisi dari class A.

class A:
    def halo(self):
        print("Halo dari A")

class B(A):
    def salam(self):
        print("Salam dari B")

class C(B):
    pass

obj = C()
obj.halo()
obj.salam()
Halo dari A
Salam dari B

Multiple Inheritance

Python juga mendukung multiple inheritance, yaitu satu class bisa mewarisi dari beberapa class sekaligus.

class Ayah:
    def sifat_ayah(self):
        print("Tegas")

class Ibu:
    def sifat_ibu(self):
        print("Penyayang")

class Anak(Ayah, Ibu):
    pass

a = Anak()
a.sifat_ayah()
a.sifat_ibu()
Tegas
Penyayang

Tips: Gunakan multiple inheritance dengan hati-hati agar kode tidak membingungkan.

Apa Itu Polymorphism?

Polymorphism adalah kemampuan object untuk menggunakan method yang sama dengan cara berbeda, tergantung class-nya. Dengan polymorphism, kamu bisa memanggil method yang sama pada object dari class berbeda, dan Python akan otomatis memilih implementasi yang sesuai.

Contoh Polymorphism

daftar_hewan = [Kucing("Oyen"), Anjing("Blacky")]

for hewan in daftar_hewan:
    hewan.suara()
Oyen : Meong!
Blacky : Guk!

Penjelasan:

  • Walau tipe object berbeda, method suara() bisa dipanggil dengan cara yang sama.
  • Python otomatis memilih method sesuai class object.

Polymorphism dengan Function

Polymorphism juga bisa diterapkan pada function yang menerima object dari class berbeda.

def panggil_suara(hewan):
    hewan.suara()

k = Kucing("Milo")
a = Anjing("Bruno")

panggil_suara(k)
panggil_suara(a)
Milo : Meong!
Bruno : Guk!

Polymorphism pada Inheritance Bertingkat

class Burung(Hewan):
    def suara(self):
        print(f"{self.nama} : Cuit!")

b = Burung("Cici")
daftar = [k1, a1, b]
for h in daftar:
    h.suara()
Mimi : Meong!
Doggy : Guk!
Cici : Cuit!

Studi Kasus: Sistem Kendaraan

Misal kamu ingin membuat aplikasi untuk berbagai jenis kendaraan.

class Kendaraan:
    def __init__(self, nama):
        self.nama = nama

    def jalan(self):
        print(f"{self.nama} berjalan di jalan raya.")

class Mobil(Kendaraan):
    def jalan(self):
        print(f"{self.nama} melaju dengan 4 roda.")

class Motor(Kendaraan):
    def jalan(self):
        print(f"{self.nama} melaju dengan 2 roda.")

daftar_kendaraan = [Mobil("Avanza"), Motor("Vario"), Kendaraan("Sepeda")]

for k in daftar_kendaraan:
    k.jalan()
Avanza melaju dengan 4 roda.
Vario melaju dengan 2 roda.
Sepeda berjalan di jalan raya.

Penjelasan:

  • Semua class punya method jalan, tapi perilakunya berbeda.
  • Polymorphism membuat kode lebih fleksibel dan mudah dikembangkan.

Manfaat Inheritance dan Polymorphism

  • Kode lebih singkat dan mudah dirawat: Tidak perlu menulis ulang kode yang sama.
  • Mudah menambah fitur baru: Cukup buat class turunan baru tanpa mengubah class lama.
  • Mendukung prinsip “kode sekali, pakai berkali-kali”: Reusability tinggi.
  • Membuat kode lebih modular dan scalable: Cocok untuk aplikasi besar.

Best Practice dan Tips

No Tips Penjelasan
1 Gunakan inheritance untuk fitur yang benar-benar umum Jangan paksa inheritance jika tidak perlu
2 Override method dengan hati-hati Pastikan perilaku sesuai kebutuhan class anak
3 Gunakan super() untuk memanggil method parent Agar inisialisasi dan resource parent tetap berjalan
4 Dokumentasikan class dan method Agar mudah dipahami tim lain
5 Hindari inheritance bertingkat terlalu dalam Bisa membuat kode sulit dirawat

Kesalahan Umum Pemula

  • Lupa memanggil super().__init__() di class turunan.
  • Override method tanpa memanggil method parent jika memang dibutuhkan.
  • Membuat inheritance yang tidak logis (misal, class Mobil mewarisi dari class Ikan).
  • Tidak memanfaatkan polymorphism, sehingga kode jadi penuh dengan if-else untuk tipe object.

FAQ Seputar Inheritance dan Polymorphism

Q: Apakah satu class bisa punya banyak parent?
A: Bisa, Python mendukung multiple inheritance.

Q: Bagaimana cara memanggil method parent dari child?
A: Gunakan super().nama_method().

Q: Apakah semua method parent diwariskan ke child?
A: Ya, kecuali di-override di class child.

Q: Apa beda inheritance dan composition?
A: Inheritance = pewarisan, composition = membangun class dari object lain (lebih fleksibel untuk beberapa kasus).

Q: Apakah polymorphism hanya untuk method yang sama?
A: Ya, polymorphism berlaku jika method punya nama yang sama di class berbeda.

Studi Kasus Lanjutan: Polymorphism pada Fungsi dan Koleksi

Misal kamu ingin membuat fungsi yang bisa menerima berbagai jenis object dan memanggil method yang sama.

class Dosen:
    def sapa(self):
        print("Halo, saya dosen.")

class Mahasiswa:
    def sapa(self):
        print("Halo, saya mahasiswa.")

def sapa_semua(objek_list):
    for obj in objek_list:
        obj.sapa()

daftar = [Dosen(), Mahasiswa(), Mahasiswa()]
sapa_semua(daftar)
Halo, saya dosen.
Halo, saya mahasiswa.
Halo, saya mahasiswa.

Kesimpulan

Inheritance dan polymorphism adalah dua pilar utama OOP di Python. Dengan inheritance, kamu bisa membuat class baru dari class yang sudah ada tanpa menulis ulang kode. Dengan polymorphism, kamu bisa membuat kode yang lebih fleksibel dan mudah dikembangkan, karena object dari class berbeda bisa diperlakukan sama jika punya method yang sama.

Teruslah berlatih membuat class dengan inheritance dan polymorphism di berbagai kasus nyata, agar semakin mahir dan siap membangun aplikasi Python yang profesional!

Happy coding!

comments powered by Disqus

You May Also Like