A. Konsep Dasar Superclass dan Subclass
Inheritance (pewarisan) memungkinkan sebuah class baru mewarisi seluruh kapabilitas (atribut dan method) dari class yang sudah ada tanpa perlu menulis ulang kodenya dari nol:
| Istilah | Makna / Peran | Contoh Hubungan 'is-a' |
|---|---|---|
| Superclass (Parent / Base Class) | Class induk utama yang mewariskan properti dan method miliknya. | `Character` adalah superclass bagi seluruh jenis pahlawan. |
| Subclass (Child / Derived Class) | Class anak turunan yang mewarisi fitur induk dan dapat menambahkan fitur baru yang spesifik. | `Mage` adalah subclass (Mage *is a* Character). |
Sintaks Deklarasi: Nama di dalam tanda kurung adalah Superclass (Induk)!<br>`class Subclass(Superclass):` artinya class `Subclass` mewarisi class `Superclass`.
B. Implementasi Kode & Pewarisan Bertingkat (Multilevel)
class Character:
def __init__(self, name):
self.name = name
class Hero(Character): # Hero mewarisi Character
def attack(self):
return self.name + ' menyerang musuh!'
class Mage(Hero): # Mage mewarisi Hero (dan otomatis mewarisi Character)
def cast_spell(self):
return self.name + ' mengeluarkan sihir api!'
m = Mage('Merlin')
print(m.name) # Output: Merlin (diwarisi dari kakek: Character)
print(m.attack()) # Output: Merlin menyerang musuh! (diwarisi dari ayah: Hero)
print(m.cast_spell()) # Output: Merlin mengeluarkan sihir api! (method milik Mage sendiri)C. Penggunaan Fungsi `super()`
Jika class turunan memiliki constructor `__init__` sendiri untuk menambahkan atribut khusus, kita wajib memanggil constructor induk menggunakan fungsi `super().__init__(...)`:
class Hero(Character):
def __init__(self, name, power):
super().__init__(name) # Mendelegasikan inisialisasi 'name' ke class induk
self.power = power # Atribut khusus tambahan untuk Hero
h = Hero('Arthur', 75)
print(h.name, h.power) # Output: Arthur 75D. Pemeriksaan Tipe: isinstance() dan issubclass()
print(isinstance(m, Mage)) # True (m adalah objek dari Mage)
print(isinstance(m, Character)) # True (m otomatis adalah Character karena hubungan pewarisan)
print(issubclass(Hero, Character))# True (Hero adalah subclass dari Character)