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

Абстрактный метод - это метод, который объявлен в абстрактном классе, но не имеет реализации. Он служит как бы шаблоном для метода, который должен быть реализован в подклассах.

from abc import ABC, abstractmethod

class Animal(ABC):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @abstractmethod
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        return "Woof!"

class Cat(Animal):
    def make_sound(self):
        return "Meow!"

Зачем они нужны?

Как они используются?