Если вы когда-либо пишете код, который должен обрабатывать смешанные типы, некоторые из которых могут определять метод API, но который не должен считаться «валидаторами», имея общий базовый класс для «true»валидаторы могут быть полезны для предварительной проверки типов и обработки только «истинных» валидаторов, а не просто «вещей, которые выглядят как валидаторы».Тем не менее, чем сложнее имя метода, тем менее вероятно, что вы столкнетесь с такого рода путаницей;шансы другого типа, реализующие действительно нишевое имя метода по совпадению, довольно малы.
Тем не менее, это действительно нишевый вариант использования.Часто, как вы можете видеть, поведение Python при наборе утки само по себе достаточно хорошее;если между различными типами нет общей функциональности, единственное значимое преимущество наличия абстрактного базового класса - для разработчика, а не для самой программы:
- Наличие общей точки отсчета для потребителя APIпроясняет, к каким методам у них тоже есть доступ
- Для реальных ABC с
@abstractmethod
декорированными методами он обеспечивает проверку времени определения для подклассов, что лишает сопровождающих возможности пропустить метод случайно