← Все вопросы

Что такое абстрактный класс в Python (ABC, abstractmethod) и зачем он?

Задан 1 месяц назад359 просмотров2 ответа
12

Хочу задать «интерфейс»: базовый класс, у которого есть метод, но реализации нет, и чтобы наследник был обязан его реализовать — иначе ошибка. Как это сделать в Python? Видел ABC и @abstractmethod.

2 ответа

18
✓ Принятый ответ — помог автору

Абстрактный класс — это базовый класс, который нельзя инстанцировать напрямую и который заставляет наследников реализовать определённые методы. Делается через модуль abc:

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        ...

class Circle(Shape):
    def __init__(self, r):
        self.r = r
    def area(self):
        return 3.14 * self.r ** 2

Shape()          # TypeError: Can't instantiate abstract class
Circle(5).area() # 78.5 — ок

Если наследник не реализует area, при попытке создать его объект Python кинет TypeError. Это и есть смысл: ABC задаёт «контракт» — что обязан уметь любой потомок. Полезно в больших проектах, чтобы гарантировать единый интерфейс у группы классов (все «фигуры» точно имеют area).

6

Наследуешь от ABC, помечаешь метод @abstractmethod. Создать объект класса с нереализованным абстрактным методом нельзя — будет TypeError. Так задаётся обязательный интерфейс для наследников.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект