НачатьНачать бесплатно

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

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