OOP 2: Inheritance & Polimorfisme

Mewarisi class, override method, super(), dan polimorfisme.

Part 21 dari 24 ± 45 menit Gratis

Pewarisan (inheritance)

Class anak dapat mewarisi atribut dan method class induk, lalu menambah atau mengubah sesuai kebutuhan. Hasilnya: kode umum cukup ditulis sekali.

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

    def suara(self):
        return "..."

    def perkenalan(self):
        return f"{self.nama} berkata {self.suara()}"

class Kucing(Hewan):          # Kucing mewarisi Hewan
    def suara(self):          # override
        return "Meong"

class Anjing(Hewan):
    def suara(self):
        return "Guk"

print(Kucing("Tom").perkenalan())     # Tom berkata Meong
print(Anjing("Rex").perkenalan())     # Rex berkata Guk
print(Hewan("Umum").perkenalan())     # Umum berkata ...

perkenalan() ditulis sekali di Hewan, tetapi hasilnya mengikuti suara() milik tiap anak.

Polimorfisme

"Satu antarmuka, banyak bentuk": kamu memanggil method yang sama pada objek berbeda tanpa peduli tipe pastinya.

for h in [Kucing("Tom"), Anjing("Rex"), Hewan("X")]:
    print(h.suara())

super(): memanggil versi induk

class Kucing(Hewan):
    def __init__(self, nama, warna):
        super().__init__(nama)       # jalankan __init__ induk
        self.warna = warna

isinstance dan issubclass

k = Kucing("Tom")
print(isinstance(k, Kucing))         # True
print(isinstance(k, Hewan))          # True (anak adalah juga induk)
print(issubclass(Kucing, Hewan))     # True

Method __str__ untuk tampilan

class Hewan:
    def __str__(self):
        return f"Hewan({self.nama})"

print(objek) memakai __str__.

Pewarisan jamak dan composition

Python mendukung banyak induk (class C(A, B)), tetapi ini mudah membingungkan. Prinsip "has-a lebih baik dari is-a": seringkali lebih fleksibel menyimpan objek lain sebagai atribut (composition) daripada mewarisi.

class Mobil:
    def __init__(self):
        self.mesin = Mesin()       # Mobil PUNYA Mesin

Class abstrak (sekilas)

Modul abc memungkinkan memaksa anak mengimplementasikan method tertentu:

from abc import ABC, abstractmethod

class Bentuk(ABC):
    @abstractmethod
    def luas(self): ...

Duck typing

"Jika berjalan seperti bebek dan bersuara seperti bebek, ia bebek." Python tidak memeriksa tipe, hanya apakah objek memiliki method yang dibutuhkan, sehingga class yang tidak berhubungan pun bisa dipakai bergantian.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X