Довідники Python abstract

Що таке abstract в Python?

Абстрактні базові класи (Abstract Base Classes, ABC) у Python використовуються для визначення інтерфейсів, які мають реалізовуватися в дочірніх класах. Модуль abc надає інструменти для створення таких класів, а також для перевірки відповідності класів певним інтерфейсам. Це корисно для створення строгих правил проєктування та підвищення читабельності коду.


Клас, який успадковує ABC, не може бути ініціалізований, якщо не реалізовані всі його абстрактні методи. Це гарантує, що всі дочірні класи відповідатимуть заданій структурі.


Особливості Abstract Base Classes:
  1. Дозволяють створювати шаблони класів для наслідування.
  2. Гарантують, що дочірні класи реалізують усі необхідні методи.
  3. Спрощують підтримку та масштабування великих проєктів.
from abc import ABC, abstractmethod

class Shape(ABC):
    # Абстрактний метод повинен бути реалізований у дочірньому класі
    @abstractmethod
    def area(self):
        pass

    @abstractmethod
    def perimeter(self):
        pass

# Реалізація конкретного класу
class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return 2 * (self.width + self.height)

# Спроба створити об'єкт абстрактного класу викличе помилку
# shape = Shape()  # TypeError

rectangle = Rectangle(4, 5)
print("Площа:", rectangle.area())
print("Периметр:", rectangle.perimeter())


У наведеному прикладі клас Shape є абстрактним базовим класом, який визначає два обов'язкових методи: area та perimeter. Клас Rectangle реалізує ці методи, завдяки чому може бути успішно ініціалізований. Якщо спробувати створити об'єкт Shape, Python видасть помилку.


Використання ABC підходить для створення складних архітектур, де необхідно задавати чіткі правила поведінки для дочірніх класів. Це робить код більш надійним та зрозумілим, особливо у великих проєктах з командною розробкою.

Коментарі
Додати коментар

Поки що коментарів немає