Warisan memungkinkan kelas (subkelas atau kelas anak) untuk menggunakan kembali dan memperluas bidang dan metode kelas lain ( atau ). Ia memodelkan hubungan : .
Warisan memungkinkan kelas (subkelas atau kelas anak) untuk menggunakan kembali dan memperluas bidang dan metode kelas lain ( atau ). Ia memodelkan hubungan : .
DogAnimalclass Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Dog(Animal): # Dog inherits everything from Animal
def bark(self): # ...and adds new behavior
return "Woof!"
d = Dog("Rex")
print(d.eat()) # "Rex is eating" → inherited, not rewritten
print(d.bark()) # "Woof!" → Dog-specific
Dog mendapat __init__ dan eat secara gratis dan menambahkan bark. Subkelas juga dapat mengesampingkan metode yang diwarisi untuk mengubah perilaku.
| Manfaat | Risiko |
|---|---|
| Gunakan kembali kode bersama | Penggabungan ketat ke kelas induk |
| Model hierarki nyata | Kelas dasar yang rapuh — perubahan induk merusak anak |
| Polimorfisme melalui tipe umum | Pohon dalam menjadi sulit diikuti |
Pedoman umum: lebih suka komposisi daripada warisan ketika hubungannya benar-benar "has-a", bukan "is-a".
Warisan adalah fitur OOP yang paling disalahgunakan: sangat menggoda untuk menggunakannya hanya untuk berbagi kode, yang menggandengkan kelas yang tidak terkait.
Digunakan dengan benar — hanya untuk hubungan is-a yang asli — ini memberikan Anda penggunaan ulang ditambah polimorfisme, memungkinkan Anda memperlakukan banyak subtipe secara seragam melalui kelas induk umum mereka.