Обзор абстрактного класса в 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

Чтобы определить абстрактные методы в абстрактном классе, метод должен быть украшен ключевым словом @abstractmethod decorator. Декоратор @abstractmethod должен быть импортирован из встроенной библиотеки python abc.

Как абстрактные классы работают в Python?

Python не имеет абстрактных классов по умолчанию, но у него есть модуль или библиотека, которые образуют основу для определения абстрактных базовых классов (ABC), и это имя модуля называется ABC. Он помечает метод базового класса как абстрактный базовый класс, а затем создает конкретные классы как реализации абстрактной базы. Метод превращается в абстрактный метод с помощью ключевого слова decorator, называемого @abstractmethod.

Модуль ABC используется для создания абстрактных классов, @ abstractmethod - декоратор, используемый для объявления абстрактного метода. Модуль 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

В приведенном выше примере класс Abstract - это Shape, который содержит один конкретный метод, называемый common, и два абстрактных метода, называемых area и perimeter. Есть два дочерних класса 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))

Абстрактные свойства

Абстрактные классы содержат абстрактные свойства наряду с абстрактными методами, определенными @abstractproperty.

Теперь мы можем использовать property, 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)

Выход:

Не удалось создать экземпляр абстрактного класса Shape с областью абстрактного метода

Квадратный класс

Вывод

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

Рекомендуемые статьи

Это руководство по абстрактному классу в Python. Здесь мы обсуждаем, как абстрактные классы работают в Python с важностью и методами с соответствующими примерами. Вы также можете взглянуть на следующие статьи, чтобы узнать больше -

  1. Файловые операции Python
  2. Инкапсуляция в Python
  3. Петли в Python
  4. Конструктор в Python
  5. Наборы Python
  6. Введение в абстрактный класс в PHP