目次
1. Gambaran Umum Pewarisan Python
Dalam Python, pewarisan adalah mekanisme di mana kelas anak mewarisi fungsi dan atribut dari kelas induk. Hal ini meningkatkan kemampuan reuse kode dan efisiensi pemeliharaan. Ini merupakan salah satu konsep penting dalam pemrograman berorientasi objek (OOP), terutama berguna dalam pengembangan sistem berskala besar dan proyek jangka panjang.Peran Dasar Pewarisan
- Reuse kode: Karena fungsi kelas yang sudah ditulis sekali dapat digunakan oleh kelas lain, kode yang duplikat dapat dihindari.
- Kemudahan pemeliharaan: Karena perubahan pada kelas induk secara otomatis tercermin pada kelas anak, perbaikan dan penambahan fitur dapat dilakukan secara efisien.
class ParentClass:
def greet(self):
print("Halo, ini kelas induk.")
class ChildClass(ParentClass):
def greet(self):
print("Halo, ini kelas anak.")
Dalam contoh ini, ChildClass
menimpa metode ParentClass
. Karena metode greet
di-override, kelas anak menampilkan salam yang unik.2. Pewarisan Tunggal di Python
Pewarisan tunggal adalah bentuk di mana satu kelas induk mewariskan fungsinya ke satu kelas anak. Ini adalah bentuk dasar pewarisan di Python, yang memungkinkan menjaga kesederhanaan kode sekaligus menambah kemampuan ekspansi.Sintaks Dasar Pewarisan Tunggal dan Contohnya
class Car:
def __init__(self, brand, color):
self.brand = brand
self.color = color
def describe(self):
print(f"Mobil ini berwarna {self.color} dengan merek {self.brand}.")
class ElectricCar(Car):
def __init__(self, brand, color, battery_size):
super().__init__(brand, color)
self.battery_size = battery_size
def describe_battery(self):
print(f"Kapasitas baterai adalah {self.battery_size}kWh.")
Dalam contoh ini, kelas ElectricCar
mewarisi fungsi kelas Car
sekaligus menambahkan fungsi penjelasan kapasitas baterai. Dengan menggunakan super()
, konstruktor kelas induk dipanggil untuk menginisialisasi atribut umum (merek dan warna).3. Override Metode
Override adalah fitur di mana kelas anak mendefinisikan kembali metode kelas induk. Dengan cara ini, Anda dapat memanfaatkan metode kelas induk sambil mengubah perilaku di kelas anak。Contoh Override
class Animal:
def speak(self):
print("Suara hewan")
class Dog(Animal):
def speak(self):
print("Guk-guk!")
Dalam contoh ini, kelas Dog
meng-override metode speak
dari kelas Animal
. Dengan demikian, pada instance kelas Dog
akan mencetak “Guk-guk”, sedangkan pada instance kelas Animal
akan menampilkan “Suara hewan”.4. Pewarisan Berganda
Pewarisan berganda memungkinkan satu kelas anak mewarisi dari beberapa kelas induk. Dengan cara ini, fungsi-fungsi dari kelas yang berbeda dapat digabungkan ke dalam satu kelas, tetapi implementasinya dapat menjadi kompleks, jadi perlu berhati-hati.Contoh dan Hal-hal yang Perlu Diperhatikan pada Pewarisan Berganda
class A:
def greet(self):
print("Salam A")
class B:
def greet(self):
print("Salam B")
class C(A, B):
pass
c = C()
c.greet() # Menampilkan "Salam A" (kelas pertama diprioritaskan sesuai MRO)
Di Python, MRO(Method Resolution Order) menentukan metode kelas induk mana yang dipanggil. Untuk memeriksa urutan ini, gunakan C.mro()
. Pewarisan berganda kuat, tetapi Anda harus menggunakannya dengan memperhatikan konflik antar kelas induk dan urutan metode.
5. Contoh Praktis Menggunakan Pewarisan
Pewarisan banyak berguna dalam pemrograman sehari-hari. Misalnya, dalam sistem manajemen karyawan perusahaan, dengan mewarisi kelas karyawan dasar ke kelas dengan jabatan tertentu, memungkinkan penggunaan kembali kode dan perluasan.Contoh Sistem Manajemen Karyawan Praktis
class Employee:
def __init__(self, first, last, pay):
self.first = first
self.last = last
self.pay = pay
def fullname(self):
return f'{self.first} {self.last}'
class Manager(Employee):
def __init__(self, first, last, pay, employees=None):
super().__init__(first, last, pay)
self.employees = employees if employees is not None else []
def add_employee(self, employee):
if employee not in self.employees:
self.employees.append(employee)
def print_employees(self):
for emp in self.employees:
print(emp.fullname())
Dalam contoh ini, kelas Manager
mewarisi kelas Employee
dan menambahkan fungsi manajemen karyawan. Sambil mempertahankan fungsi umum kelas induk, fungsi diperluas sesuai dengan jabatan tertentu.6. Praktik Terbaik Pewarisan dan Perbandingannya dengan Komposisi
Pewarisan sangat kuat, tetapi jika digunakan secara berlebihan dapat meningkatkan risiko kode menjadi rumit. Khususnya, pewarisan berganda dapat membuat hubungan antar kelas menjadi kompleks, sehingga harus digunakan dengan hati-hati. Dalam kasus seperti ini, disarankan untuk menggunakan komposisi alih-alih pewarisan.Contoh Komposisi
Komposisi adalah pola desain di mana sebuah kelas memiliki kelas lain sebagai bagian (instansi) untuk mendelegasikan fungsionalitas.class Engine:
def start(self):
print("Mesin telah dimulai.")
class Car:
def __init__(self, engine):
self.engine = engine
def start(self):
self.engine.start()
engine = Engine()
car = Car(engine)
car.start() # "Mesin telah dimulai." ditampilkan
Dengan cara ini, komposisi adalah metode untuk berbagi fungsionalitas antar kelas tanpa menggunakan pewarisan. Dengan hanya memberikan fungsi yang diperlukan, kode menjadi lebih fleksibel dan mudah dikelola.