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

У наведеному вище прикладі клас "Анотація" - "Форма", який містить один конкретний метод, який називається загальним, і два абстрактні методи, звані область і периметр. Є два дочірні класи Клас квадрат і прямокутник, які успадковують абстрактний клас Форма і реалізують абстрактний метод.

Реалізація через підкласифікацію:

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

Абстрактні властивості

Абстрактні класи містять абстрактні властивості разом із абстрактними методами, визначеними @ab абстракт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)

Пітон 2

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

Пітон 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
  2. Інкапсуляція в Python
  3. Петлі в Python
  4. Конструктор в Python
  5. Набори Python
  6. Вступ до абстрактного класу з PHP