LoslegenKostenlos starten

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

<Kurs>Objektorientierte Programmierung in Python</Kurs>
Kurs ansehen

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

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