Prezentare generală a clasei abstracte din Python

Clasele abstracte sunt clasele declarate, dar nu conțin implementări. Nu poate fi moștenit decât. Clasele abstracte funcționează ca șablon pentru subclase. Clasele abstracte nu pot fi instanțiate și necesită subclase pentru a furniza implementări pentru metode abstracte. Are nevoie de subclase pentru a furniza implementări ale metodelor abstracte definite în clasele Abstract. Clasele abstracte conțin una sau mai multe metode abstracte. Metodele abstracte sunt metodele declarate fără nicio implementare. Nu putem crea direct obiectul clasei abstracte, dar putem moșteni clasa de bază și apoi să creăm obiectul. În acest subiect, vom afla despre clasa abstractă în Python.

Atât clasa abstractă, cât și clasa concretă pot fi conținute în clasa Abstract. Folosind o clasă abstractă putem defini o structură generalizată a metodelor fără a oferi implementări complete ale fiecărei metode. Metodele abstracte care sunt definite în clasa abstractă, în general, nu au corpul, dar este posibil să existe metode abstracte cu implementări în clasa abstractă și dacă vreo subclasă este derivată dintr-o astfel de clasă abstractă trebuie să furnizeze implementarea acestor metode. . Dacă nici o metodă abstractă nu este implementată de clasa derivată, atunci va genera o eroare. Obiectul clasei abstracte nu poate fi creat direct, dar atunci când folosim această clasă abstractă pentru a oferi anumite funcționalități unei clase de bază sau clasei copil, aceasta poate face acest lucru prin crearea obiectului clasei de bază.

Importanța claselor abstracte

1. Oferă funcționalitatea implicită a claselor de bază.

2. Definește o API comună pentru setul de subclase, utilă în cazul în care un terț furnizează pluginuri într-o aplicație.

3. Ajutor în codul mare a fost să vă amintiți multe clase este dificil.

Sintaxă

From abc import ABC
Class Educba(ABC):

Pentru a considera orice clasă ca o clasă abstractă, clasa trebuie să moștenească metaclassul ABC din modulul abc încorporat în piton. modulul abc importă metaclassul ABC.

Metode abstracte în Python

Metodele abstracte sunt metodele declarate fără nicio implementare.

Sintaxă

from abc import ABC, abstract method
Class Educba(ABC):
@abstractmethod
def mymethod(self):
#empty body
pass

Pentru a defini metodele abstracte într-o clasă abstractă, metoda trebuie decorată cu un cuvânt cheie numit @abstractmethod decorator. Decoratorul @abstractmethod trebuie să fie importat din biblioteca încorporată python numită abc.

Cum au funcționat clasele abstracte în Python?

Python nu are clase abstracte în mod implicit, dar are un modul sau o bibliotecă care constituie baza pentru definirea claselor Abstract Base (ABC), iar numele modulului se numește ABC. Acesta marchează metoda clasei de bază drept clasa de bază abstractă și apoi produce clase concrete ca implementări ale bazei abstracte. O metodă se transformă într-o metodă abstractă cu ajutorul unui cuvânt cheie decorator numit @abstractmethod.

Modulul ABC este utilizat pentru a crea clasele abstracte, @ abstractmethod este decoratorul folosit pentru a declara metoda abstractă. Modulul ABC stabilește un contract între clasa de bază și clasa de beton.

Modulul abc oferă baza pentru definirea claselor de bază abstracte (ABC) în Python. Modulul de colecții are câteva clase concrete care provin din ABC și pot fi împărțite în continuare. În afară de toate acestea, modulul de colecții conține, de asemenea, unele ABC care pot fi folosite pentru a testa dacă o clasă sau o instanță furnizează sau nu o anumită interfață.

Acest modul oferă următoarea clasă:

clasa abc.ABCMeta

Metaclassul este utilizat pentru definirea claselor de bază abstractă (ABC)

Folosim o metaclass pentru a crea o clasă de bază abstractă.

from abc import ABCMeta
class C:
__metaclass__ = ABCMeta
MyABC.register(tuple)
assert issubclass(tuple, C)
assert isinstance((), C)

Exemplu

# importing the ABC module
from abc import ABC, abstractmethod
class Shape(ABC):
def common(self):
print("This is a concrete method")
@abstractmethod # decorator
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
class Square(Shape):
def __init__(self, side):
self.__side=side
def area(self):
return self.__side*self.__side
def perimeter(self):
return 4*self.__side
class Rectangle(Shape):
def __init__(self, length, breath):
self.__length=length
self.__breath=breath
def area(self):
return self.__length*self.__breath
def perimeter(self):
return 2*(self.__length+self.__breath)
S1=Square(4)
print(S1.common())
print(S1.area())
print(S1.perimeter())
R1=Rectangle(2, 4)
print(R1.common())
print(R1.area())
print(R1.perimeter())

Rezultat obținut

Aceasta este o metodă concretă

16

16

Aceasta este o metodă concretă

8

12

În exemplul de mai sus, clasa Abstract este Formă care conține o metodă concretă numită comună și două metode abstracte numite zonă și perimetru. Există două clase Class Square și Rectangle care moștenesc Forma clasei abstracte și implementează metoda abstractă.

Implementare prin subclase:

import abc
class Shape:
def area(self):
pass
class Square(Shape):
def area(self):
print("Square is a child class")
print( issubclass(Square, Shape))
print( isinstance(Square(), Shape))

Proprietăți abstracte

Clasele abstracte conțin proprietăți abstracte împreună cu metode abstracte definite de @abstractproperty.

Acum putem utiliza property, property.getter (), property.setter () și property.deleter () cu clase abstracte.

Sintaxă

class class_name(ABC):
@property
@abstractmethod
Def method(self):

Aceasta definește proprietatea de numai citire.

class Class_name:
__metaclass__ = ABCMeta
def getx(self): …
def setx(self, value): …
x = abstractproperty(getx, setx)

Python 2

class C(ABC):
@abstractproperty
def my_abstract_property(self):

Python 3.3

class C(ABC):
@property
@abstractmethod
def my_abstract_property(self):
import abc
from abc import ABC, abstractmethod
class Shape(ABC):
@abc.abstractproperty
def area(self):
return "Shape class"
class Square(parent):
@property
def area(self):
return "Square class"
try:
s1 =Shape()
print( s1.area)
except for Exception as err:
print (err)
s1 = Square()
print (s1.area)

ieşire:

Nu se poate instaura o clasă abstractă Formă cu aria metodei abstracte

Clasa pătrată

Concluzie

În sfârșit, concluzionez că clasa abstractă este o modalitate de a asigura un anumit nivel de calitate a codului, deoarece acestea aplică anumite standarde și pot reduce cantitatea de cod duplicat pe care scriem. Stabilește o legătură între clasa de bază și clasa de beton. Oferă o implementare ușoară a codului. Definește o structură generalizată a metodelor fără implementarea completă a acesteia. Face viața programatorului ușoară prin abstractizarea procesului de fundal și făcându-i să se concentreze doar pe puncte importante. Face cercetarea și înțelegerea mult mai rapidă prin înțelegerea structurii comune și simple a claselor din cod.

Articole recomandate

Acesta este un ghid pentru clasa abstractă din Python. Aici discutăm cum funcționează clasele abstracte în Python cu importanța și metodele cu exemple adecvate. De asemenea, puteți arunca o privire la următoarele articole pentru a afla mai multe -

  1. Python File Operations
  2. Încapsulare în Python
  3. Bucle în Python
  4. Constructor în Python
  5. Seturi Python
  6. Introducere în clasa abstractă în PHP