Python - Warisan

Apakah itu Warisan di Python?

Warisan adalah konsep dasar dalam pemrograman berorientasi objek (OOP) yang membolehkan satu kelas untukwariskan sifat dan metode dari kelas lain. Ini membolehkan penggunaan kembali kode dan modulariti, kerana anda boleh mencipta kelas baru berdasarkan kelas yang ada tanpa perlu untuk menulis kode yang sama lagi. Di Python, warisan diimplementasikan menggunakan kata kunci class diikuti dengan nama kelas induk dalam kurungan.

Python - Inheritance

Mencipta Kelas Induk

Mari kita mula dengan mencipta kelas induk yang simple bernama Animal:

class Animal:
def __init__(self, name):
self.name = name

def speak(self):
raise NotImplementedError("Subclass must implement this method")

Dalam contoh ini, kita definisikan kelas Animal dengan metode __init__ yang menginisialisasi atribut name dan metode speak yang memunculkan kesalahan NotImplementedError. Kesalahan ini akan dihasilkan jika kelas anak tidak menyediakan implementasi sendiri bagi metode speak.

Mencipta Kelas Anak

Sekarang, mari kita mencipta kelas anak bernama Dog yang warisi dari kelas Animal:

class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"

Kelas Dog warisi semua atribut dan metode dari kelas Animal, tetapi ia menyediakan implementasi sendiri bagi metode speak. Apabila kita mencipta rakaman kelas Dog dan memanggil metode speak nya, ia akan mengembalikan "[nama anjing] says Woof!" bukannya memunculkan kesalahan.

my_dog = Dog("Buddy")
print(my_dog.speak())  # Output: Buddy says Woof!

Jenis Warisan

Terdapat tiga jenis warisan di Python: warisan tunggal, warisan ganda, warisan multilevel, dan warisan hierarki. Kita akan menjelajahi setiap jenis secara terperinci.

Python - Warisan Tunggal

Warisan tunggal adalah bentuk paling umum warisan, di mana satu kelas warisi dari hanya satu kelas induk. Seperti yang kita lihat di atas, kelas Dog warisi dari kelas Animal, yang merupakan contoh warisan tunggal.

Python - Warisan Ganda

Warisan ganda adalah apabila satu kelas warisi dari lebih daripada satu kelas induk. Walau bagaimanapun, Python tidak menyokong warisan ganda secara langsung melalui sintaks definisi kelas. Sebaliknya, ia menggunakan teknik yang dipanggil "mixins" atau "interfaces" untuk mencapai warisan ganda.

Urutan Penyelesaian Metode (MRO)

Python menggunakan algoritma linearisasi C3 untuk menentukan urutan di mana kelas dasar dicari apabila mencari metode. MRO memastikan bahwa setiap kelas muncul paling banyak sekali dalam urutan penyelesaian metode, dan menjaga urutan kelas dasar seperti yang dinyatakan dalam definisi kelas.

Python - Warisan Multilevel

Warisan multilevel terjadi apabila satu kelas warisi dari kelas anak, membentuk hirarki kelas. Ini adalah contoh:

class Mammal(Animal):
pass

class Cat(Mammal):
def speak(self):
return f"{self.name} says Meow!"

Dalam kasus ini, kelas Cat warisi dari kelas Mammal, yang juga warisi dari kelas Animal. Ini membentuk hirarki warisan multilevel.

Python - Warisan Hierarki

Warisan hierarki melibatkan beberapa kelas anak warisi dari satu kelas induk. Sebagai contoh:

class Reptile(Animal):
pass

class Snake(Reptile):
def speak(self):
return f"{self.name} says Hiss!"

class Lizard(Reptile):
def speak(self):
return f"{self.name} says Crawl!"

Dalam kasus ini, kedua-dua kelas Snake dan Lizard warisi dari kelas Reptile, yang juga warisi dari kelas Animal. Ini membentuk struktur warisan hierarki.

Python - Warisan Hibrid

Warisan hibrid menggabungkan fitur warisan ganda dan jenis warisan lain. Ia tidak secara langsung disokong di Python, tetapi boleh dicapai menggunakan mixins atau dengan menggabungkan jenis warisan yang berbeza.

Fungsi super()

Fungsi super() digunakan untuk memanggil metode dari kelas induk di dalam kelas anak. Ia sangat berguna apabila anda mahu untuk melanjutkan atau menimpa metode dari kelas induk sambil masih mengekalkan sebahagian fungsiannya. Ini adalah contoh:

class Bird(Animal):
def __init__(self, name, wingspan):
super().__init__(name)
self.wingspan = wingspan

def speak(self):
return f"{self.name} says Chirp!"

Dalam kasus ini, kelas Bird warisi dari kelas Animal dan menggunakan fungsi super() untuk memanggil metode __init__ kelas induk. Ini memastikan bahwa atribut name diinisialisasi dengan baik. Selain itu, kelas Bird menyediakan implementasi sendiri bagi metode speak.

my_bird = Bird("Tweety", 10)
print(my_bird.speak())  # Output: Tweety says Chirp!

Dengan menggunakan warisan, anda boleh mencipta kelas yang lebih khusus yang warisi dan lanjutkan fungsionalitas kelas induk mereka, mempromosikan penggunaan kembali kode dan organisasi. Ingat bahwa warisan hanya satu aspek OOP, dan ada konsep lain seperti polimorfisme, penyekatan, dan abstraksi yang juga memainkan peranan penting dalam merancang sistem perisian yang kuat dan dapat dipelihara.

Credits: Image by storyset