Alternative Konstruktoren
Python erlaubt dir, auch Klassenmethoden zu definieren – mit dem Decorator @classmethod und einem speziellen ersten Argument cls. Der Hauptzweck von Klassenmethoden ist, Methoden zu definieren, die eine Instanz der Klasse zurückgeben, dabei aber nicht denselben Code wie __init__() verwenden.
Angenommen, du entwickelst ein Zeitreihen‑Paket und möchtest eine eigene Klasse für die Arbeit mit Datumsangaben definieren: BetterDate. Die Attribute der Klasse sind year, month und day. Du möchtest einen Konstruktor haben, der BetterDate‑Objekte aus den Werten für Jahr, Monat und Tag erzeugt, aber du willst auch BetterDate‑Objekte aus Strings wie 2020-04-30 erstellen können.
Die folgenden Funktionen könnten hilfreich sein:
- Die Methode
.split("-")teilt einen String an"-"in ein Array, z. B. liefert"2020-04-30".split("-")["2020", "04", "30"]. int()wandelt einen String in eine Zahl um, z. B. istint("2019")2019.
Diese Übung ist Teil des Kurses
Objektorientierte Programmierung in Python
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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)