Преглед на абстрактния клас в Python

Абстрактните класове са класовете, които са декларирани, но не съдържат реализации. То може да бъде наследствено само. Абстрактните класове работят като шаблон за подкласовете. Абстрактните класове не могат да бъдат инстанцирани и изискват подкласове да предоставят реализации за абстрактни методи. Нуждаят се от подкласове, за да предоставят реализации на абстрактните методи, дефинирани в абстрактни класове. Абстрактните класове съдържат един или повече абстрактни методи. Абстрактните методи са методите, които се декларират без никакви реализации. Не можем директно да създадем обекта от абстрактен клас, но можем да наследим базовия клас и след това да създадем обекта. В тази тема ще научим за абстрактния клас в Python.

Както абстрактният клас, така и конкретният клас могат да се съдържат в класа абстракт. С помощта на абстрактна класа можем да определим обобщена структура на методите, без да предоставяме пълни реализации на всеки метод. Абстрактните методи, които са дефинирани в абстрактния клас, обикновено нямат тялото, но е възможно да има абстрактни методи с реализации в абстрактния клас и ако някой подклас се извлича от такъв абстрактен клас, трябва да се осигури реализацията на такива методи, Ако който и да е абстрактен метод не се реализира от извлечения клас, той ще хвърли грешка. Обектът на абстрактния клас не може да бъде създаден директно, но когато използваме този абстрактен клас за предоставяне на определени функционалности на базов клас или детски клас, той може да направи това, като създаде обекта на базовия клас.

Значение на абстрактните класове

1. Той осигурява функционалността по подразбиране на базовите класове.

2. Той дефинира общ API за набора от подкласове, полезен, когато трета страна предоставя плъгини в приложение.

3. Полезно в голям код беше запомнянето на много класове е трудно.

Синтаксис

From abc import ABC
Class Educba(ABC):

За да се разглежда всеки клас като абстрактен клас, класът трябва да наследи ABC метаклас от вградения в abc модул python. abc модул импортира ABC метаклас.

Абстрактни методи в Python

Абстрактните методи са методите, които се декларират без никакви реализации.

Синтаксис

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

За да дефинирате абстрактните методи в абстрактен клас, методът трябва да бъде украсен с ключова дума, наречена @ab абстрактmethod decorator. Декораторът @ab абстрактmethod трябва да бъде импортиран от вградената библиотека на python, наречена abc.

Как работиха абстрактните класове в Python?

Python няма абстрактни класове по подразбиране, но има модул или библиотека, които формират основата за дефиниране на абстрактни базови класове (ABC) и името на този модул се нарича ABC. Той маркира метода на базовия клас като абстрактна базова класа и след това произвежда конкретни класове като реализации на абстрактната база. Методът се превръща в абстрактен метод с помощта на ключова дума декоратор, наречена @ab абстрактmethod.

ABC модулът се използва за създаване на абстрактни класове, @ абстрактmethod е декораторът, използван за деклариране на метода абстракт. ABC модулът установява договор между базовия клас и бетонния клас.

Abc модулът предоставя основата за дефиниране на абстрактни базови класове (ABC) в Python. Модулът за събиране има някои конкретни класове, които са получени от ABC и те могат да бъдат разделени допълнително. Освен всичко това модулът за колекции съдържа и някои ABC, които могат да се използват за тестване дали клас или екземпляр предоставя определен интерфейс или не.

Този модул осигурява следния клас:

клас abc.ABCMeta

Метакласът се използва за определяне на абстрактни базови класове (ABC)

Използваме метаклас, за да създадем абстрактна базова класа.

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

пример

# 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())

Получен резултат

Това е конкретен метод

16

16

Това е конкретен метод

8

12

В горния пример клас Абстрактен е Shape, който съдържа един конкретен метод, наречен общ и два абстрактни метода, наречени област и периметър. Има две детски класове Square и Rectangle, които наследяват абстрактния клас Shape и прилагат абстрактния метод.

Изпълнение чрез подкласиране:

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))

Абстрактни свойства

Абстрактните класове съдържат абстрактни свойства, заедно с абстрактни методи, дефинирани от @abpositeproperty.

Вече можем да използваме свойство, property.getter (), property.setter () и property.deleter () с абстрактни класове.

Синтаксис

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

Това определя свойството само за четене.

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)

изход:

Не може да се създаде абстрактна форма на клас с област на абстрактния метод

Квадрат клас

заключение

Накрая заключавам, че абстрактният клас е начин да се осигури определено ниво на качество на кода, защото те налагат определени стандарти и могат да намалят количеството на дублирания код, който пишем. Той установява връзка между базовия клас и бетонния клас. Той осигурява лесна реализация на код. Той дефинира обобщена структура от методи без пълното му прилагане. Той улеснява живота на програмиста, като абстрахира фоновия процес и ги кара да се съсредоточават само върху важни точки. Това прави изследването и разбираемостта много по-бързо чрез разбиране на общата и проста структура на класове в рамките на кода.

Препоръчителни статии

Това е ръководство за абстрактния клас в Python. Тук обсъждаме как работят абстрактните класове в Python с важността и методите с подходящи примери. Може да разгледате и следните статии, за да научите повече -

  1. Python File Operations
  2. Капсулиране в Python
  3. Примки в Python
  4. Конструктор в Python
  5. Python Sets
  6. Въведение в абстрактния клас по PHP