Что нужно сделать
Реализуйте класс 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
.
- Формат вывода соответствует примеру.
- Переменные, функции и собственные методы классов имеют значащие имена, не
a
,b
,c
,d
. - Классы и методы/функции имеют прописанную документацию.
- Есть аннотация типов для методов/функций и их аргументов (кроме
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'))