Python - Warisan

Apa itu Warisan di Python?

Warisan adalah konsep pokok dalam pemrograman berorientasi objek (OOP) yang memungkinkan satu kelas untuk mewarisi properti dan metode dari kelas lain. Hal ini memungkinkan penggunaan kode kembali dan modularitas, karena Anda dapat membuat kelas baru berdasarkan kelas yang ada tanpa harus menulis kode yang sama lagi. Di Python, warisan diimplementasikan menggunakan kata kunci class diikuti dengan nama kelas induk dalam tanda kurung.

Python - Inheritance

Membuat Kelas Induk

Ayo mulai dengan membuat kelas induk sederhana bernama Animal:

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

def speak(self):
raise NotImplementedError("Subclass harus mengimplementasikan metode ini")

Dalam contoh ini, kita mendefinisikan kelas Animal dengan metode __init__ yang menginisialisasi atribut name dan metode speak yang menghasilkan NotImplementedError. Kesalahan ini akan dihasilkan jika subclass tidak menyediakan implementasi sendiri dari metode speak.

Membuat Kelas Anak

Sekarang, ayo membuat kelas anak bernama Dog yang mewarisi dari kelas Animal:

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

Kelas Dog mewarisi semua atribut dan metode dari kelas Animal, tetapi menyediakan implementasi sendiri dari metode speak. Ketika kita membuat sebuah contoh dari kelas Dog dan memanggil metode speak nya, itu akan mengembalikan "[nama anjing] berkata Woof!" instead of raising an error.

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

Tipe Warisan

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

Python - Warisan Tunggal

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

Python - Warisan Ganda

Warisan ganda adalah ketika kelas mewarisi dari lebih dari satu kelas induk. Namun, Python tidak mendukung warisan ganda secara langsung melalui sintaks definisi kelas..instead, itu menggunakan teknik yang disebut "mixins" atau "interfaces" untuk mencapai warisan ganda.

Urutan Resolusi Metode (MRO)

Python menggunakan algoritma linierisasi C3 untuk menentukan urutan dalam kter kelas dasar dicari saat mencari metode. MRO memastikan bahwa setiap kelas muncul paling banyak sekali di urutan resolusi metode, dan itu menjaga urutan kelas dasar seperti yang ditentukan dalam definisi kelas.

Python - Warisan Multilevel

Warisan multilevel terjadi ketika kelas mewarisi dari subclass, membentuk hirarki kelas. Ini adalah contoh:

class Mammal(Animal):
pass

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

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

Python - Warisan Hierarki

Warisan hierarki melibatkan beberapa subclass mewarisi dari satu superclass. Contohnya:

class Reptile(Animal):
pass

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

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

Dalam kasus ini, kedua kelas Snake dan Lizard mewarisi dari kelas Reptile, yang kembali mewarisi dari kelas Animal. Ini membentuk struktur warisan hierarki.

Python - Warisan Hibrid

Warisan hibrid menggabungkan fitur warisan ganda dan jenis warisan lain. Ini tidak secara langsung didukung di Python, tetapi dapat dicapai menggunakan mixins atau dengan menggabungkan jenis warisan yang berbeda.

Fungsi super()

Fungsi super() digunakan untuk memanggil metode dari kelas induk dalam subclass. Hal ini sangat berguna ketika Anda ingin mengekstensi atau mengganti metode dari kelas induk sambil masih menjaga beberapa fungsionalitasanya. Ini adalah contoh:

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

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

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

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

Dengan menggunakan warisan, Anda dapat membuat kelas yang lebih spesialisasi yang mewarisi dan mengekstensi fungsionalitas kelas induk mereka, mempromosikan penggunaan kode kembali dan organisasi. Ingat bahwa warisan hanya satu aspek dari OOP, dan ada konsep lain seperti polimorfisme, enkapsulasi, dan abstraksi yang juga berperan penting dalam merancang sistem perangkat lunak yang kuat dan dapat dipelihara.

Credits: Image by storyset