← Kembali ke kursus
Pelajaran kursus · Python
Pelajaran 29

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.000

Loop 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`.