Zacznij terazZacznij za darmo

Alternatywne konstruktory

Python pozwala też definiować metody klasowe – służy do tego dekorator @classmethod oraz specjalny pierwszy argument cls. Metody klasowe są najczęściej używane do tworzenia instancji klasy w sposób inny niż standardowy konstruktor __init__().

Przykładowo: tworzysz pakiet do analizy szeregów czasowych i chcesz zdefiniować własną klasę do obsługi dat – BetterDate. Klasa ma mieć atrybuty year, month i day. Chcesz mieć konstruktor tworzący obiekty BetterDate na podstawie podanych wartości roku, miesiąca i dnia, ale też możliwość tworzenia obiektów BetterDate z ciągów znaków takich jak 2020-04-30.

Przydatne funkcje:

  • Metoda .split("-") dzieli ciąg znaków przy "-" i zwraca tablicę, np. "2020-04-30".split("-") zwraca ["2020", "04", "30"],
  • int() konwertuje ciąg znaków na liczbę, np. int("2019") daje 2019.

To ćwiczenie jest częścią kursu

Programowanie obiektowe w Pythonie

Zobacz kurs

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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)
Edytuj i uruchom kod