Kelas Abstrak di Python
Artikel ini menjelaskan kelas abstrak di Python.
Kami akan menjelaskan mekanisme dasar kelas abstrak menggunakan modul abc
, memberikan contoh praktis, dan menjelaskan semuanya dengan kode yang menyertainya.
YouTube Video
Kelas Abstrak di Python
Modul abc
Python (Abstract Base Classes) adalah bagian dari pustaka standar dan digunakan untuk mendefinisikan kelas abstrak, menyediakan template untuk metode yang harus diimplementasikan oleh sebuah kelas. Menggunakan modul ini meningkatkan fleksibilitas dan kekuatan dalam desain kelas.
Apa itu Kelas Abstrak?
Kelas abstrak adalah kelas yang digunakan untuk mendefinisikan antarmuka umum untuk kelas konkret (dapat diinstansikan). Kelas abstrak tidak dapat diinstansikan sendiri; implementasi konkret harus disediakan dalam kelas turunan (subkelas).
Modul abc
memungkinkan Anda untuk mendefinisikan metode atau properti abstrak dan memaksakan implementasinya di kelas yang mewarisi. Jika bahkan satu metode abstrak tidak diimplementasikan, kelas tidak dapat diinstansikan.
Cara Menggunakan Modul abc
Untuk membuat kelas abstrak menggunakan modul abc
, warisi dari kelas ABC
dan definisikan metode abstrak menggunakan dekorator @abstractmethod
.
1from abc import ABC, abstractmethod
2
3# Definition of the abstract base class
4class Animal(ABC):
5
6 @abstractmethod
7 def sound(self):
8 pass
9
10# Concrete implementation in the subclass
11class Dog(Animal):
12 def sound(self):
13 return "Woof!"
14
15class Cat(Animal):
16 def sound(self):
17 return "Meow!"
Di sini, kelas Animal
didefinisikan sebagai kelas abstrak dan mencakup metode abstrak yang disebut sound
. Metode ini harus diimplementasikan secara konkret dalam subkelas. Dog
dan Cat
mewarisi dari Animal
dan masing-masing mengimplementasikan metode sound
.
Menginstansikan Kelas Abstrak
Kelas abstrak tidak dapat diinstansikan secara langsung. Sebagai contoh, mencoba menginstansikan kelas Animal
itu sendiri akan menghasilkan error.
1animal = Animal() # TypeError: Can't instantiate abstract class Animal with abstract methods sound
- Saat mencoba menginstansikan kelas abstrak, Python menentukan bahwa ada metode abstrak yang belum diimplementasikan dan menimbulkan
TypeError
. Jika semua metode abstrak yang diperlukan diimplementasikan dalam subkelas, penginstansian menjadi mungkin.
Banyak Metode Abstrak
Sebuah kelas juga dapat memiliki banyak metode abstrak. Kecuali semua metode abstrak diimplementasikan dalam subkelas, kelas tersebut tetap menjadi kelas abstrak.
1from abc import ABC, abstractmethod
2
3class Vehicle(ABC):
4
5 @abstractmethod
6 def start_engine(self):
7 pass
8
9 @abstractmethod
10 def stop_engine(self):
11 pass
12
13class Car(Vehicle):
14 def start_engine(self):
15 return "Car engine started"
16
17 def stop_engine(self):
18 return "Car engine stopped"
Dalam contoh ini, kelas Vehicle
memiliki dua metode abstrak, dan kelas Car
hanya dapat diinstansiasi setelah mengimplementasikan kedua metode tersebut.
Mendefinisikan Properti Abstrak
Modul abc
mendukung tidak hanya metode abstrak tetapi juga properti abstrak. Hal ini memungkinkan penerapan properti pada kelas turunan.
1from abc import ABC, abstractmethod
2
3class Shape(ABC):
4
5 @property
6 @abstractmethod
7 def area(self):
8 pass
9
10class Circle(Shape):
11 def __init__(self, radius):
12 self.radius = radius
13
14 @property
15 def area(self):
16 return 3.14159 * (self.radius ** 2)
- Dalam contoh ini, kelas
Shape
memiliki properti abstrakarea
, dan subkelasCircle
merealisasikan properti ini. Dengan cara ini, menggunakan kelas abstrak untuk memastikan implementasi properti membantu menjaga konsistensi kode.
Menggunakan isinstance()
dan issubclass()
Dengan menggunakan kelas abstrak, Anda dapat mengonfirmasi hubungan pewarisan kelas dengan isinstance()
atau issubclass()
, sehingga meningkatkan keamanan dan fleksibilitas kode.
1from abc import ABC, abstractmethod
2
3# Definition of the abstract base class
4class Animal(ABC):
5
6 @abstractmethod
7 def sound(self):
8 pass
9
10# Concrete implementation in the subclass
11class Dog(Animal):
12 def sound(self):
13 return "Woof!"
14
15class Cat(Animal):
16 def sound(self):
17 return "Meow!"
18
19class Vehicle(ABC):
20
21 @abstractmethod
22 def start_engine(self):
23 pass
24
25 @abstractmethod
26 def stop_engine(self):
27 pass
28
29class Car(Vehicle):
30 def start_engine(self):
31 return "Car engine started"
32
33 def stop_engine(self):
34 return "Car engine stopped"
35
36print("Dog() is an Animal? -> ", isinstance(Dog(), Animal)) # True
37print("Dog is subclass of Animal? -> ", issubclass(Dog, Animal)) # True
38print("Cat() is a Vehicle? -> ", isinstance(Cat(), Vehicle)) # False
isinstance()
digunakan untuk memeriksa apakah sebuah objek adalah instance dari kelas tertentu, dan issubclass()
digunakan untuk memeriksa apakah sebuah kelas adalah subkelas dari kelas tertentu.
Ringkasan
Dengan merancang kelas abstrak menggunakan modul abc
, Anda dapat memperjelas antarmuka antar kelas dan memastikan implementasi metode dan properti yang diperlukan. Hal ini membantu menjaga konsistensi kode dan mengurangi kesalahan, sehingga sangat berguna untuk proyek berskala besar.
Kelas abstrak adalah alat penting dalam Python yang mendukung pemrograman berorientasi objek yang fleksibel, meningkatkan kemampuan penggunaan kembali dan pemeliharaan kelas.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.