ользовать datetime.datetime.now(), чтобы получить объект datetime с текущей датой/временем, используя атрибут .hour для времени суток и .strftime ('%A') — для дня недели. Как все прошло? Ваше решение должно выглядеть примерно так, как показано в следующем примере. Листинг 3.3. Модуль, который генерирует приветствия для онлайн-магазина
роцедурное ПО использует процедурные вызовы, которые мы называем функциями. Эти функции не инкапсулированы в классы, поэтому часто опираются только на свои входные данные и иногда на какое-то глобальное состояние.
Инкапсуляция и абстракция нередко являются итеративными процессами. Когда вы пишете больше кода, конструкции могут терять свой первоначальный смысл, что вполне естественно. Если код взбунтовался, нужен рефакторинг — обновление структуры кода для более полного удовлетворения ваших потребностей. Придется поменять способы представления понятий и форм поведения. Перемещение данных и имплементаций туда-сюда является необходимой частью совершенствования кода.
Крепостная стена инкапсуляции подразумевает приватность. Классы могут иметь приватные методы и данные, доступные только экземплярам класса. В свою очередь, с публичными методами и данными (интерфейсом класса) другие классы могут взаимодействовать.
Вместо строгой поддержки приватности Python доверяет разработчикам, следующим общепринятой договоренности: методы и переменные, предназначенные для использования только внутри класса, имеют префикс из символа подчеркивания. Но сторонние пакеты в своей документации часто громко заявляют о том, что такие методы могут меняться от версии к версии и на них не следует опираться явно.