Альтернативні конструктори
У Python ви також можете визначати методи класу, використовуючи декоратор @classmethod і спеціальний перший аргумент cls. Основне призначення методів класу — оголошувати методи, які повертають екземпляр класу, але не використовують той самий код, що й __init__().
Наприклад, ви розробляєте пакет для часових рядів і хочете визначити власний клас для роботи з датами — BetterDate. Атрибути цього класу: year, month і day. Ви хочете мати конструктор, який створює обʼєкти BetterDate, якщо задані значення року, місяця й дня, а також мати можливість створювати обʼєкти 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)