Kelas Abstrak dalam Python

Kelas Abstrak dalam Python

Artikel ini menerangkan kelas abstrak dalam Python.

Kami akan menerangkan mekanisme asas kelas abstrak menggunakan modul abc, memberikan contoh praktikal, dan menghuraikan semuanya dengan kod yang disertakan.

YouTube Video

Kelas Abstrak dalam Python

Modul abc Python (Kelas Asas Abstrak) adalah sebahagian daripada pustaka piawai dan digunakan untuk mentakrifkan kelas abstrak, menyediakan templat untuk kaedah yang perlu dilaksanakan oleh kelas. Menggunakan modul ini meningkatkan fleksibiliti dan ketahanan dalam reka bentuk kelas.

Apakah itu Kelas Abstrak?

Kelas abstrak adalah kelas yang digunakan untuk mentakrifkan antara muka yang sama untuk kelas konkrit (boleh dimulakan). Kelas abstrak tidak boleh dimulakan sendiri; pelaksanaan konkrit mesti disediakan dalam kelas turunan (subkelas).

Modul abc membolehkan anda mentakrifkan kaedah abstrak atau sifat dan memaksa pelaksanaannya dalam kelas pewaris. Jika walaupun satu kaedah abstrak tidak dilaksanakan, kelas tidak boleh dimulakan.

Cara Menggunakan Modul abc

Untuk mencipta kelas abstrak menggunakan modul abc, warisi daripada kelas ABC dan takrifkan kaedah abstrak menggunakan hiasan @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 ditakrifkan sebagai kelas abstrak dan termasuk kaedah abstrak yang dipanggil sound. Kaedah ini mesti dilaksanakan secara konkrit dalam subkelas. Dog dan Cat mewarisi daripada Animal dan setiap satunya melaksanakan kaedah sound.

Memulakan Kelas Abstrak

Kelas abstrak tidak boleh dimulakan secara langsung. Sebagai contoh, percubaan untuk memulakan kelas Animal itu sendiri akan menyebabkan ralat.

1animal = Animal()  # TypeError: Can't instantiate abstract class Animal with abstract methods sound
  • Apabila cuba memulakan kelas abstrak, Python menentukan bahawa terdapat kaedah abstrak yang tidak dilaksanakan dan menaikkan ralat jenis TypeError. Jika semua kaedah abstrak yang diperlukan dilaksanakan dalam subkelas, pengawalan objek menjadi boleh dilakukan.

Banyak Kaedah Abstrak

Ia juga mungkin untuk sesebuah kelas mempunyai banyak kaedah abstrak. Melainkan semua kaedah abstrak dilaksanakan dalam subkelas, kelas tersebut kekal sebagai 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 mempunyai dua kaedah abstrak, dan kelas Car hanya boleh diwujudkan selepas melaksanakan kedua-dua kaedah tersebut.

Mentakrifkan Sifat Abstrak

Modul abc menyokong bukan sahaja kaedah abstrak tetapi juga sifat abstrak. Ini membolehkan penguatkuasaan pelaksanaan sifat dalam 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 mempunyai sifat abstrak area, dan subkelas Circle mengkonkritkan sifat ini. Dengan cara ini, menggunakan kelas abstrak untuk menguatkuasakan pelaksanaan sifat membantu mengekalkan keseragaman kod.

Menggunakan isinstance() dan issubclass()

Dengan menggunakan kelas abstrak, anda boleh mengesahkan hubungan pewarisan kelas dengan isinstance() atau issubclass(), meningkatkan keselamatan dan fleksibiliti kod.

 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 jika objek adalah contoh kelas tertentu, dan issubclass() digunakan untuk memeriksa jika kelas adalah subkelas dari kelas tertentu.

Ringkasan

Dengan mereka bentuk kelas abstrak menggunakan modul abc, anda boleh menjelaskan antara muka antara kelas dan menguatkuasakan pelaksanaan kaedah dan sifat yang diperlukan. Ini membantu mengekalkan keseragaman kod dan mengurangkan kesilapan, menjadikannya amat berguna untuk projek berskala besar.

Kelas abstrak adalah alat penting dalam Python yang menyokong pengaturcaraan berorientasikan objek yang fleksibel, meningkatkan kebolehgunaan semula dan kebolehselenggaraan kelas.

Anda boleh mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Sila lihat juga saluran YouTube kami.

YouTube Video