Panduan Pewarisan Python: Tunggal, Override, Berganda

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).
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

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.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

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.

7. Ringkasan

Warisan di Python adalah alat yang kuat untuk meningkatkan penggunaan kembali kode dan skalabilitas. Dengan memahami teknik seperti pewarisan tunggal, pewarisan berganda, dan overriding, Anda dapat membuat program yang efisien dan mudah dipelihara. Di sisi lain, penting untuk menyadari perbedaan penggunaan dengan komposisi dan merancang dengan tepat. Dengan menguasai pewarisan yang tepat, Anda dapat membangun basis kode fleksibel dan kuat.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール