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.
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