Mga Abstract na Klas sa Python
Ipinaliwanag ng artikulong ito ang mga abstract na klase sa Python.
Ipapaliwanag namin ang pangunahing mekanismo ng mga abstract na klase gamit ang abc
module, magbibigay ng mga praktikal na halimbawa, at ilalarawan ang lahat kasama ang kaukulang code.
YouTube Video
Mga Abstract na Klas sa Python
Ang abc
module ng Python (Abstract Base Classes) ay bahagi ng standard library at ginagamit upang magtakda ng mga abstract na klase, nagbibigay ito ng template para sa mga method na dapat ipatupad ng isang klase. Ang paggamit ng module na ito ay nagpapabuti ng kakayahang umangkop at tibay sa disenyo ng klase.
Ano ang isang Abstract na Klas?
Ang mga abstract na klase ay mga klase na ginagamit upang tukuyin ang isang karaniwang interface para sa mga concrete (instantiable) na klase. Ang mga abstract na klase ay hindi maaaring gamitin bilang object mismo; kinakailangan ng isang konkretong implementasyon sa mga derived (sub) na klase.
Pinapayagan ka ng abc
module na magtakda ng mga abstract na method o properties at ipatupad ang mga ito sa mga klase na magmamana. Kung kahit isang abstract na method ay hindi naipatupad, ang klase ay hindi maaaring gamitin bilang object.
Paano Gamitin ang abc
Module
Upang lumikha ng isang abstract na klase gamit ang abc
module, magmana mula sa ABC
na klase at tukuyin ang mga abstract na method gamit ang @abstractmethod
decorator.
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!"
Dito, ang klase na Animal
ay tinukoy bilang isang abstract na klase at naglalaman ng isang abstract na method na tinatawag na sound
. Ang method na ito ay kailangang gamitin nang konkretong paraan sa mga subclass. Ang Dog
at Cat
ay nagmana mula sa Animal
at parehong nagpatupad ng sound
na method.
Paglikha ng mga Object mula sa Abstract na Klas
Ang mga abstract na klase ay hindi maaaring gamitin bilang object nang direkta. Halimbawa, ang pagtatangkang gamitin ang Animal
na klase mismo bilang object ay magreresulta sa error.
1animal = Animal() # TypeError: Can't instantiate abstract class Animal with abstract methods sound
- Kapag sinusubukang gumamit ng abstract na klase bilang object, tinutukoy ng Python na mayroong mga hindi pa naipatupad na abstract na method at itinatapon ang
TypeError
. Kung lahat ng kinakailangang abstract na method ay naipatupad sa subclass, nagiging posible na gamitin ito bilang object.
Maramihang Abstract na Method
Posible rin para sa isang klase na magkaroon ng maraming abstract na method. Kung hindi ipinatupad ang lahat ng abstract na method sa subclass, mananatiling abstract na klase ang klase.
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"
Sa halimbawang ito, ang Vehicle
class ay may dalawang abstract na metodo, at ang Car
class ay maaari lamang i-instantiate matapos maisakatuparan ang parehong mga metodo.
Pagpapaliwanag sa Abstract na Mga Ari-arian
Ang abc
na module ay sumusuporta hindi lamang sa abstract na mga metodo kundi pati na rin sa abstract na mga ari-arian. Ito ay nagpapahintulot sa pagpapataw ng pagpapatupad ng mga ari-arian sa mga derived na klase.
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)
- Sa halimbawang ito, ang
Shape
class ay may abstract na ari-arian naarea
, at ang subclass naCircle
ay nagbibigay ng kongkretong kahulugan sa ari-arian na ito. Sa ganitong paraan, ang paggamit ng abstract na mga klase upang ipatupad ang mga ari-arian ay tumutulong sa pagpapanatili ng konsistensya ng code.
Paggamit ng isinstance()
at issubclass()
Sa paggamit ng abstract na mga klase, maaari mong kumpirmahin ang ugnayan ng pagmamana ng mga klase sa pamamagitan ng isinstance()
o issubclass()
, na nagpapabuti sa kaligtasan at kakayahang umangkop ng code.
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
Ang isinstance()
ay ginagamit upang masuri kung ang isang object ay instance ng tinukoy na klase, at ang issubclass()
ay ginagamit upang masuri kung ang isang klase ay subclass ng tinukoy na klase.
Buod
Sa pamamagitan ng pagdidisenyo ng abstract na mga klase gamit ang abc
na module, maaari mong linawin ang interface sa pagitan ng mga klase at ipatupad ang kinakailangang mga metodo at ari-arian. Ito ay nakakatulong sa pagpapanatili ng konsistensya ng code at pagbawas ng mga error, kaya't ito ay lubos na kapaki-pakinabang para sa mga proyektong may malaking saklaw.
Ang abstract na mga klase ay isang mahalagang kasangkapan sa Python na sumusuporta sa nababagay na object-oriented na programming, na nagpapahusay sa reusability at maintainability ng klase.
Maaari mong sundan ang artikulo sa itaas gamit ang Visual Studio Code sa aming YouTube channel. Paki-check din ang aming YouTube channel.