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, bijvoorbeeldint("2019")is2019.
Deze oefening maakt deel uit van de cursus
Objectgeoriënteerd programmeren in Python
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)