Задачи на ООП Python: классы, наследование и dataclass
Практикум объектно-ориентированного программирования для тех, кто уже знаком с функциями Python. Вместо заучивания определений вы будете исправлять и проектировать небольшие классы: температуру с проверкой значения, банковский счёт, товар, обработчик уведомлений и трекер задач.
Как пройти подборку
Сначала отработайте init, атрибуты экземпляра и обычные методы. Затем переходите к property, альтернативному конструктору и специальным методам. После этого разберите dataclass, перечисления, наследование и взаимодействие объектов через общий интерфейс.
В конце есть задачи на замену жёсткой зависимости и перенос процедурного кода в классы. Для них полезно заранее выписать, какие данные хранит каждый объект и какое действие он обязан выполнять.
Три вопроса к своему классу
Кто владеет состоянием? Список, созданный как изменяемый атрибут класса, может оказаться общим для нескольких экземпляров. Для отдельного состояния создавайте коллекцию в конструкторе; в dataclass для изменяемого значения подходит default_factory.
Какие значения допустимы? Если объект не должен содержать отрицательный баланс или неверную температуру, проверка должна происходить в согласованной точке изменения. Нельзя считать класс корректным только потому, что один пример его создания сработал.
Нужна ли проверка конкретного типа? Общий метод интерфейса позволяет вызывающему коду работать с разными реализациями. Длинная цепочка isinstance часто означает, что выбор поведения ещё остался снаружи объектов.
Проверяйте обычный сценарий и ограничения из условия. Не добавляйте новый публичный метод вместо требуемого и не меняйте сигнатуры, которые использует проверка. В каждой задаче указан самостоятельный контракт.
Для объяснений и обучения по порядку откройте бесплатный курс Python для продвинутых. После классов потренируйтесь писать тесты с pytest.
- Класс, init, атрибуты экземпляра и методы — задача по Python
describe() при следующем коде? Проверьте ответ в задаче из бесплатного курса Python.
Python для продвинутых: ООП, типизация и тестирование - Инкапсуляция и property в Python: исправьте класс температуры
Исправьте класс температуры: защитите инварианты через property и разберите инкапсуляцию в Python на работающем коде.
Python для продвинутых: ООП, типизация и тестирование - Python: Класс Event с альтернативным конструктором и валидацией
Создайте класс Event с альтернативным конструктором через classmethod и валидацией данных. Задача по ООП Python.
Python для продвинутых: ООП, типизация и тестирование - Специальные методы: repr, str, eq, len — задача по Python
Практическая задача по теме «Специальные методы: repr, str, eq, len» с проверкой ответа онлайн.
Python для продвинутых: ООП, типизация и тестирование - Python: Иерархия исключений для банковского счёта
Реализуйте иерархию собственных исключений и банковский счёт, который поднимает их в нужных случаях. Практика Python.
Python для продвинутых: ООП, типизация и тестирование - Python: Каталог товаров: dataclass, NamedTuple и field(defaultfactory=...)
Сравните dataclass и NamedTuple в каталоге товаров; примените field(defaultfactory) для изменяемых данных. Задача онлайн.
Python для продвинутых: ООП, типизация и тестирование - Python: Маршрутизатор задач: Enum вместо строковых констант
Замените строковые статусы задач на Enum и сформируйте сводку по статусам и приоритетам. Практика Python с проверкой.
Python для продвинутых: ООП, типизация и тестирование - Python: Сборщик уведомлений: замени жёсткую зависимость на инъекцию
Разделите сервис уведомлений на компоненты и внедрите зависимость вместо жёсткой привязки к классу. Практика композиции Python.
Python для продвинутых: ООП, типизация и тестирование - Наследование, super() и переопределение методов — задача по Python
чтобы не дублировать логику родителя? Проверьте ответ в задаче из бесплатного курса Python.
Python для продвинутых: ООП, типизация и тестирование - Python: Система оценки контента: ABC с двумя конкретными подклассами
Создайте абстрактный класс ContentItem через ABC и abstractmethod, затем реализуйте два конкретных типа контента. Задача по Python.
Python для продвинутых: ООП, типизация и тестирование - Python: Диспетчер отчётов: полиморфный вызов без isinstance
Реализуйте диспетчер отчётов через общий интерфейс объектов без проверок isinstance. Практическая задача на полиморфизм.
Python для продвинутых: ООП, типизация и тестирование - Python: Рефакторинг процедурного трекера задач в классы
Перенесите процедурный трекер задач в классы, сохранив прежнее поведение. Задача на рефакторинг и ООП Python.
Python для продвинутых: ООП, типизация и тестирование
