Реализация собственного класса даты

Храните год, месяц и день и сравнивайте значения полей. По условию today должен возвращать фиксированную дату 2024-07-12, а не реальную сегодняшнюю.

Короткий ответ

Что ответить на собеседовании

Храните год, месяц и день и сравнивайте значения полей. По условию today должен возвращать фиксированную дату 2024-07-12, а не реальную сегодняшнюю.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо создать класс MyDate, который предоставляет следующую функциональность:

  • конструировать объект, передавая год, месяц и день, например MyDate(2024, 7, 12);
  • получать «текущую» дату через статический метод MyDate.today() (в задаче зафиксировано как 2024, 7, 12);
  • сравнивать два экземпляра MyDate на равенство оператором ==.
date_a = MyDate(2024, 7, 12)
date_b = MyDate.today()

assert date_a == date_b  # True

Ответ

Храните год, месяц и день и сравнивайте значения полей. По условию today должен возвращать фиксированную дату 2024-07-12, а не реальную сегодняшнюю.

from dataclasses import dataclass
from datetime import date

@dataclass(frozen=True)
class MyDate:
    year: int
    month: int
    day: int

    def __post_init__(self):
        date(self.year, self.month, self.day)

    @staticmethod
    def today():
        return MyDate(2024, 7, 12)

dataclass создаёт сравнение полей, а date(...) проверяет существование календарной даты. Поэтому приведённый assert проходит. Для настоящего текущего дня реализация использовала бы date.today(), но тогда результат зависел бы от часов и часового пояса окружения; тест лучше строить на подменяемом источнике времени, а не постоянной дате.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее