Polimorfisme dan duck typing
Satu antarmuka, banyak perilaku — dan duck typing Python.
Pahami konsepnya
Polimorfisme berarti "banyak bentuk": objek berbeda class merespons method yang sama dengan caranya sendiri. Kucing.bersuara() menghasilkan "meong", Anjing.bersuara() "guk" — kode pemanggil tidak perlu tahu class apa, cukup method bersuara() tersedia.
Python memungkinannya lewat duck typing: "jika berjalan seperti bebek dan bersuara seperti bebek, ia bebek". Tidak ada interface wajib — yang penting objek PUNYA method yang dipanggil. Error hanya muncul saat method tidak ada (AttributeError).
Operator overloading adalah polimorfisme pada operator: __str__ mengatur print(), __eq__ mengatur ==, __add__ mengatur +. Definisikan method khusus ini di class untuk mengubah perilaku bawaan.
Coba contoh kode
class Kucing:
def bersuara(self): return "meong"
class Anjing:
def bersuara(self): return "guk guk"
for hewan in [Kucing(), Anjing()]:
print(hewan.bersuara())
class Uang:
def __init__(self, jumlah):
self.jumlah = jumlah
def __str__(self):
return f"Rp{self.jumlah:,}"
def __add__(self, lain):
return Uang(self.jumlah + lain.jumlah)
print(Uang(15000) + Uang(25000)) # Rp40.000Loop memanggil bersuara pada dua class berbeda — duck typing memastikan keduanya bekerja tanpa interface. Uang mengoverload __str__ dan __add__ sehingga print dan operator + berperilaku kustom.
Latihan singkat
Uji: overload __add__ pada Jarak — Jarak(3)+Jarak(7) harus `10 km`.