ПочатиПочніть безкоштовно

Альтернативні конструктори

У 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)
Редагувати та запускати код