Aan de slagGa gratis aan de slag

Alternatieve constructors

Python laat je ook klasse-methoden definiëren met de decorator @classmethod en een speciale eerste parameter cls. Het belangrijkste gebruik van class methods is het definiëren van methoden die een instantie van de klasse teruggeven, maar niet dezelfde code gebruiken als __init__().

Stel, je ontwikkelt een time series-pakket en je wilt je eigen klasse voor datums maken: BetterDate. De attributen van de klasse zijn year, month en day. Je wilt een constructor die BetterDate-objecten maakt op basis van de waarden voor jaar, maand en dag, maar je wilt ook BetterDate-objecten kunnen maken uit strings zoals 2020-04-30.

De volgende functies kunnen handig zijn:

  • De methode .split("-") splitst een string op "-" in een array, bijvoorbeeld "2020-04-30".split("-") geeft ["2020", "04", "30"],
  • int() zet een string om in een getal, bijvoorbeeld int("2019") is 2019.

Deze oefening maakt deel uit van de cursus

Objectgeoriënteerd programmeren in Python

Cursus bekijken

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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)
Code bewerken en uitvoeren