Храните год, месяц и день и сравнивайте значения полей. По условию 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(), но тогда результат зависел бы от часов и часового пояса окружения; тест лучше строить на подменяемом источнике времени, а не постоянной дате.