Альтернативные конструкторы
В Python можно определять и методы класса — с помощью декоратора @classmethod и специального первого аргумента cls. Методы класса чаще всего используются для того, чтобы возвращать экземпляры класса, не прибегая к коду __init__().
Предположим, вы разрабатываете пакет для работы с временными рядами и хотите создать собственный класс BetterDate для работы с датами. Атрибуты класса — year, month и day. Вы хотите задать конструктор, который создаёт объекты BetterDate по значениям года, месяца и дня, а также иметь возможность создавать такие объекты из строк вида 2020-04-30.
Пригодятся следующие функции:
- Метод
.split("-")разбивает строку по символу"-"и возвращает массив, например:"2020-04-30".split("-")вернёт["2020", "04", "30"]. int()преобразует строку в число, например:int("2019")даёт2019.
Это упражнение является частью курса
Объектно-ориентированное программирование на Python
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
class BetterDate:
# Constructor
def __init__(self, year, month, day):
# Recall that Python allows multiple variable assignments in one line
self.year, self.month, self.day = year, month, day
# Define a class method from_str
____
def from_str(____, datestr):
# Split the string at "-" and convert each part to integer
parts = datestr.split("-")
year, month, day = int(parts[0]), ____, ____
# Return the class instance
____ ____(____, ____, ____)
bd = BetterDate.from_str('2020-04-30')
print(bd.year)
print(bd.month)
print(bd.day)