Урок 76. Абстрактные классы и пользовательские исключения

📁 Блок: OOP ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#abc #class #abstractmethod #def #raise #except #super #print #try #as #repr #len #in #bool #for #next #from #import #pass #return #help #title #if #is #str #iter #while #break #add #append #reversed #not #staticmethod #else #format #lambda #and #with #classmethod #property

⚡ Кратко: суть темы

Абстрактные классы задают «контракт» для наследников: какие методы обязательно нужно реализовать. Пользовательские исключения делают ошибки понятными и позволяют отлавливать их точечно.

  • Абстрактный класс наследуется от ABC, а методы помечаются @abstractmethod.
  • Экземпляр абстрактного класса создать нельзя — он служит шаблоном.
  • Пользовательское исключение наследуется от Exception или его подклассов, например ValueError.
  • Docstring и аннотации типов делают классы понятнее для других разработчиков.

Что запомнить: используйте абстрактные классы, чтобы зафиксировать интерфейс, и собственные исключения, чтобы отделить ошибки вашей предметной области от стандартных.

Частая ошибка: забыть наследовать класс от ABC — тогда @abstractmethod не запретит создание объектов.

📖 О чём этот урок

Урок продолжает знакомство с ООП: мы изучим, как создавать классы-шаблоны, которые нельзя использовать напрямую, но которые обязывают наследников реализовывать определённые методы. Также разберём, как писать собственные типы ошибок, чтобы код был чище, а отладка — проще. В конце — краткое знакомство с магическими методами и итераторами.

Что изучим

  • Абстрактные классы. Зачем нужны, как создаются через abc.ABC и @abstractmethod.
  • Абстрактный класс как договор. Метод с телом и вызовом через super(); код, который работает с любым наследником.
  • Документация классов. Docstring с секциями Args, Returns, Raises, вывод через __doc__ и help().
  • Пользовательские исключения. Наследование от Exception, передача дополнительных данных, привязка к встроенным типам ошибок.
  • Иерархия исключений проекта. Общий предок вроде BankError и порядок блоков except.
  • Магические методы. Протоколы Python: строковое представление, сравнение, итерация, __reversed__.

📚 Что повторить перед изучением

🎯 Что изучать дальше