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