LoslegenKostenlos loslegen

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. ist int("2019") 2019.

Diese Übung ist Teil des Kurses

Objektorientierte Programmierung in Python

Kurs anzeigen

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)
Code bearbeiten und ausführen