Урок 76. Абстрактные классы и пользовательские исключения
⚡ Кратко: суть темы
Абстрактные классы задают «контракт» для наследников: какие методы обязательно нужно реализовать. Пользовательские исключения делают ошибки понятными и позволяют отлавливать их точечно.
- Абстрактный класс наследуется от
ABC, а методы помечаются@abstractmethod. - Экземпляр абстрактного класса создать нельзя — он служит шаблоном.
- Пользовательское исключение наследуется от
Exceptionили его подклассов, напримерValueError. - Docstring и аннотации типов делают классы понятнее для других разработчиков.
Что запомнить: используйте абстрактные классы, чтобы зафиксировать интерфейс, и собственные исключения, чтобы отделить ошибки вашей предметной области от стандартных.
Частая ошибка: забыть наследовать класс от ABC — тогда @abstractmethod не запретит создание объектов.
📖 О чём этот урок
Урок продолжает знакомство с ООП: мы изучим, как создавать классы-шаблоны, которые нельзя использовать напрямую, но которые обязывают наследников реализовывать определённые методы. Также разберём, как писать собственные типы ошибок, чтобы код был чище, а отладка — проще. В конце — краткое знакомство с магическими методами и итераторами.
Что изучим
- Абстрактные классы. Зачем нужны, как создаются через
abc.ABCи@abstractmethod. - Абстрактный класс как договор. Метод с телом и вызовом через
super(); код, который работает с любым наследником. - Документация классов. Docstring с секциями
Args,Returns,Raises, вывод через__doc__иhelp(). - Пользовательские исключения. Наследование от
Exception, передача дополнительных данных, привязка к встроенным типам ошибок. - Иерархия исключений проекта. Общий предок вроде
BankErrorи порядок блоковexcept. - Магические методы. Протоколы Python: строковое представление, сравнение, итерация,
__reversed__.