Mga Abstract na Klas sa Python

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 na area, at ang subclass na Circle 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.

YouTube Video