Дата

Что нужно сделать

Реализуйте класс Date, который должен:

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

Оба метода должны получать на вход строку вида dd-mm-yyyy.

При тестировании программы объект класса Date должен инициализироваться исключительно через метод конвертации, например:

date = Date.from_string('10-12-2077')

Неверный вариант: date = Date(10, 12, 2077)

Пример основного кода:

date = Date.from_string('10-12-2077')
print(date)
print(Date.is_date_valid('10-12-2077'))
print(Date.is_date_valid('40-12-2077'))

Результат:

День: 10	Месяц: 12	Год: 2077
True
False

Что оценивается

  • Результат вычислений корректен.
  • Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
  • При написании классов соблюдаются основные принципы ООП: инкапсуляция, наследование и полиморфизм.
    • Для получения и установки значений у приватных атрибутов используются сеттеры и геттеры с соответствующими декораторами.
    • Для создания нового класса на основе уже существующего используется наследование.
    • Для статических и классовых методов используется декоратор classmethod.
  • Формат вывода соответствует примеру.
  • Переменные, функции и собственные методы классов имеют значащие имена, не abcd.
  • Классы и методы/функции имеют прописанную документацию.
  • Есть аннотация типов для методов/функций и их аргументов (кроме args и kwargs). Если функция/метод ничего не возвращают, то используется None.
class Date:

    def __init__(self):
        self.__date = Date.from_string

    @classmethod
    def from_string(cls, value: str) -> str:
        '''Метод класса Date конвертирующий полученную строку в дату'''
        if cls.is_date_valid(value):
            newvalue = tuple(value.split('-'))
            result = f'День: {newvalue[0]}   Месяц: {newvalue[1]}   Год: {newvalue[2]}'
            return result

    @classmethod
    def is_date_valid(cls, value: str) -> bool:
        '''Метод класса Date проверяющий валидность даты'''
        result = value.split('-')
        if len(result) == 3 and \
                32 > int(result[0]) > 0 \
                and 13 > int(result[1]) > 0:
            return True
        else:
            return False

    def get_date(self):
        return self.__date

    def __str__(self):
        return self.get_date



date = Date.from_string('10-12-2077')
print(date)
print(Date.is_date_valid('10-12-2077'))
print(Date.is_date_valid('40-12-2077'))