Menguasai Warisan Python: Konsep, Sintaks, dan Contoh Praktis
Python Inheritance
Warisan memungkinkan Anda membuat kelas baru yang mewarisi semua fungsionalitas dari kelas induk sambil menambah atau memperluas fitur. Tutorial ini menjelaskan cara menggunakan warisan di Python, dengan contoh yang jelas dan panduan praktik terbaik.
Video: Python Inheritance
Inheritance in Python
Warisan adalah prinsip inti pemrograman berorientasi objek yang mempromosikan penggunaan kembali kode dan hierarki logis. Sebuah kelas baru (kelas derived atau child) didefinisikan dengan perubahan minimal atau tanpa perubahan pada kelas yang sudah ada (kelas base atau parent). Kelas anak secara otomatis menerima atribut dan metode dari orang tuanya, yang kemudian dapat dioverride atau diperluas sesuai kebutuhan.
Python Inheritance Syntax
class BaseClass:
# body of base class
class DerivedClass(BaseClass):
# body of derived class
Dalam cuplikan di atas, DerivedClass mewarisi semua anggota publik dari BaseClass. Dengan menambahkan metode baru atau mengganti yang ada, kelas derived dapat menyesuaikan perilaku sambil menggunakan kembali implementasi dasar.
Contoh Inheritance di Python
Mari kita ilusrasikan warisan dengan contoh praktis. Misalkan kita memiliki kelas Polygon generik yang menyimpan jumlah sisi dan panjangnya:
class Polygon:
def __init__(self, no_of_sides):
self.n = no_of_sides
self.sides = [0 for _ in range(no_of_sides)]
def input_sides(self):
self.sides = [float(input(f"Enter side {i+1} : ")) for i in range(self.n)]
def display_sides(self):
for i, side in enumerate(self.sides, 1):
print(f"Side {i} is {side}")
Kelas Polygon mengenkapsulasi atribut dan metode umum untuk setiap poligon. Sebuah Triangle adalah poligon spesifik dengan tepat tiga sisi, jadi ia dapat mewarisi dari Polygon tanpa mendefinisikan ulang logika bersama:
class Triangle(Polygon):
def __init__(self):
super().__init__(3) # initialize base with 3 sides
def find_area(self):
a, b, c = self.sides
s = (a + b + c) / 2
area = (s * (s - a) * (s - b) * (s - c)) ** 0.5
print(f"The area of the triangle is {area:.2f}")
Menjalankan yang berikut menunjukkan warisan dalam aksi:
>>> t = Triangle()
>>> t.input_sides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4
>>> t.display_sides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0
>>> t.find_area()
The area of the triangle is 6.00
Perhatikan bahwa Triangle dapat memanggil input_sides() dan display_sides() meskipun ia tidak mendefinisikannya—warisan membuat metode ini tersedia secara otomatis.
Jika atribut atau metode tidak ditemukan dalam kelas anak, Python mencari kelas induk, dan pencarian ini berlanjut ke atas rantai warisan jika diperlukan.
Method Overriding in Python
Kedua Polygon dan Triangle mendefinisikan metode __init__. Implementasi anak mengganti yang di atas, tetapi dapat (dan harus) memperluas logika dasar dengan memanggilnya secara eksplisit. Penggunaan super() adalah pendekatan modern dan yang disarankan:
class Triangle(Polygon):
def __init__(self):
super().__init__(3) # calls Polygon.__init__
Saat mengganti, metode anak dapat menambahkan perilaku baru atau memodifikasi perilaku dasar sambil mempertahankan fungsionalitas asli.
Python menyediakan isinstance() dan issubclass() untuk memeriksa hubungan warisan:
t = Triangle()
print(isinstance(t, Triangle)) # True
print(isinstance(t, Polygon)) # True
print(isinstance(t, int)) # False
print(isinstance(t, object)) # True
print(issubclass(Polygon, Triangle)) # False
print(issubclass(Triangle, Polygon)) # True
print(issubclass(bool, int)) # True
Utilitas ini penting untuk pemeriksaan tipe dan memastikan objek sesuai dengan antarmuka yang diharapkan.
Untuk lebih lanjut tentang super(), lihat dokumentasi Python super() function.