Ответ
Абстрактный класс — это класс, который не может быть инстанциирован (нельзя создать его объект) и предназначен для определения общего интерфейса (контракта) для своих подклассов. Он заставляет дочерние классы реализовывать определенные методы.
Ключевые отличия:
- Инстанцирование: Нельзя создать объект абстрактного класса напрямую. Объект обычного класса создать можно.
- Абстрактные методы: Абстрактный класс может содержать методы, помеченные декоратором
@abstractmethod
, у которых нет реализации. Подклассы обязаны их реализовать, иначе они тоже станут абстрактными. - Назначение: Служит в качестве шаблона или контракта для группы классов. Обычный класс представляет конкретную сущность.
Для создания абстрактных классов в Python используется модуль abc
(Abstract Base Classes).
Пример:
from abc import ABC, abstractmethod
# Абстрактный класс определяет контракт: "любая фигура должна иметь метод для расчета площади"
class AbstractShape(ABC):
@abstractmethod
def area(self) -> float:
# Нет реализации, только объявление
pass
# Конкретный класс, реализующий контракт
class Square(AbstractShape):
def __init__(self, side: float):
self.side = side
def area(self) -> float:
return self.side * self.side
# Другой конкретный класс
class Circle(AbstractShape):
def __init__(self, radius: float):
self.radius = radius
def area(self) -> float:
return 3.14159 * self.radius ** 2
# Попытка создать экземпляр абстрактного класса вызовет TypeError
# shape = AbstractShape() # -> TypeError: Can't instantiate abstract class...
# Экземпляры дочерних классов создаются успешно
square = Square(5)
circle = Circle(3)
print(f"Площадь квадрата: {square.area()}")
print(f"Площадь круга: {circle.area()}")