Урок 77. Практикум 19

📁 Блок: OOP ⏱️ Время изучения: ~90 мин 🎯 Сложность: Практикум
#from #import #divmod #raise #class #def #try #except #as #print #if #return #pass #else #not #int #is #in #mkdir #lambda #for #add #time #with #property

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

Электронная дверь с кодом. Практикум закрепляет инкапсуляцию, приватные атрибуты, пользовательские исключения и работу с datetime на сквозном примере класса Door.

  • Код доступа хранится в приватном атрибуте __code.
  • Проверку кода выносим в отдельный приватный метод, чтобы не дублировать логику.
  • Блокировку после неудачных попыток реализуем через datetime и timedelta.
  • Для ошибок «дверь заблокирована» создаём собственное исключение DoorBlockedError.

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

Частая ошибка: забыть сбросить счётчик неудачных попыток после успешного открытия или смены кода.

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

Практикум посвящён созданию класса Door — электронной двери с кодовым замком. Задания идут от простого к сложному: сначала базовая проверка кода, затем смена кода, блокировка после нескольких неудачных попыток и, наконец, пользовательское исключение для заблокированной двери.

Что изучим

  • Инкапсуляцию. Какие атрибуты делать приватными, а какие оставить открытыми.
  • DRY. Вынесение повторяющейся проверки кода в приватный метод.
  • Работу с временем. Расчёт времени разблокировки через datetime.now() и timedelta.
  • Пользовательские исключения. Когда и как бросать raise DoorBlockedError(...).

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

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