Alternative Konstrukteure

In Python kannst du auch Klassenmethoden definieren, indem du den @classmethod Dekorator und ein spezielles erstes Argument cls verwendest. Die Hauptanwendung von Klassenmethoden ist die Definition von Methoden, die eine Instanz der Klasse zurückgeben, aber nicht den gleichen Code wie __init__() verwenden.

Du entwickelst zum Beispiel ein Zeitreihenpaket und möchtest eine eigene Klasse für die Arbeit mit Daten definieren, BetterDate. Die Attribute der Klasse sind year, month und day. Du möchtest einen Konstruktor haben, der BetterDate Objekte mit den Werten für Jahr, Monat und Tag erstellt, aber du möchtest auch in der Lage sein, BetterDate Objekte aus Strings wie 2020-04-30 zu erstellen.

Die folgenden Funktionen könnten für dich nützlich sein:

  • .split("-") Methode wird eine Zeichenkette bei"-" in ein Array aufgespalten, z.B. "2020-04-30".split("-") gibt ["2020", "04", "30"] zurück,

  • int() wandelt eine Zeichenkette in eine Zahl um, z.B. int("2019") ist 2019.

Diese Übung ist Teil des Kurses

Objektorientierte Programmierung in Python

Kurs anzeigen

Interaktive Übung zum Anfassen

Probieren Sie diese Übung aus, indem Sie diesen Beispielcode ausführen.

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)