Menu
Coddy logo textTech

Einführung in Magic Methods

Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 33 von 64.

Magische Methoden (auch Dunder-Methoden genannt) sind spezielle Methoden mit doppelten Unterstrichen am Anfang und Ende. Python ruft sie automatisch als Reaktion auf bestimmte Operationen auf.

Hier ist ein Beispiel für eine Klasse mit magischen Methoden:

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
    
    def __str__(self):
        return f"{self.title} by {self.author}"

Die __init__-Methode wird automatisch aufgerufen, wenn Sie ein Objekt erstellen:

my_book = Book("Python Programming", "John Smith", 350)

Die __str__-Methode wird automatisch aufgerufen, wenn Sie das Objekt in einen String umwandeln:

print(my_book)        # Ruft __str__ automatisch auf
print(str(my_book))   # Ruft ebenfalls __str__ auf

Ausgabe:

Python Programming by John Smith
Python Programming by John Smith

Ohne __str__ würde das Drucken den Speicherort des Objekts anzeigen:

class SimpleBook:
    def __init__(self, title):
        self.title = title

simple = SimpleBook("Test Book")
print(simple)  # <__main__.SimpleBook object at 0x...>

Fügen Sie eine weitere Magic-Methode für die Länge hinzu:

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
    
    def __str__(self):
        return f"{self.title} by {self.author}"
    
    def __len__(self):
        return self.pages

my_book = Book("Python Programming", "John Smith", 350)
print(len(my_book))   # Ruft __len__ automatisch auf

Ausgabe:

350

Wichtiger Punkt: Magic Methods beginnen und enden mit doppelten Unterstrichen (__method__) und werden automatisch von Python aufgerufen. Sie ermöglichen es Ihren Objekten, mit integrierten Funktionen wie str(), len() und Operatoren zu arbeiten, was Ihre Klassen „pythonischer“ und intuitiver in der Anwendung macht.

challenge icon

Aufgabe

Einfach

In dieser Challenge wirst du eine Counter-Klasse mit Magic Methods implementieren.

  • counter.py - Dies ist die Datei, die du bearbeiten musst, sie enthält TODO-Kommentare, die dich bei der Implementierung unterstützen
  • driver.py - Enthält umfangreiche Testfälle

Implementiere die Counter-Klasse in counter.py und die Testfälle in driver.py gemäß den TODO-Kommentaren. Die Klasse sollte die Initialisierung mit optionalen Werten, die String-Repräsentation und Additionsoperationen unterstützen.

Spickzettel

Magische Methoden (Dunder-Methoden) sind spezielle Methoden mit doppelten Unterstrichen, die Python automatisch als Reaktion auf bestimmte Operationen aufruft.

Häufige magische Methoden:

  • __init__ - Wird beim Erstellen eines Objekts aufgerufen
  • __str__ - Wird beim Konvertieren in einen String mit str() oder print() aufgerufen
  • __len__ - Wird bei Verwendung der Funktion len() aufgerufen
class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
    
    def __str__(self):
        return f"{self.title} by {self.author}"
    
    def __len__(self):
        return self.pages

my_book = Book("Python Programming", "John Smith", 350)
print(my_book)        # Ruft __str__ automatisch auf
print(len(my_book))   # Ruft __len__ automatisch auf

Ohne __str__ zeigt das Drucken den Speicherort des Objekts anstelle eines lesbaren Formats an.

Probier es selbst

# TODO: Importiere die Counter-Klasse aus counter.py
# Verwende das Format: from counter import Counter

# Umfassender Testfall-Handler
test_case = input()

if test_case == "init_test":
    # TODO: Teste die Initialisierung mit dem Standardwert
    # Erstelle einen Counter ohne Argumente und gib ihn aus
    # Erwartete Ausgabe: "Count: 0"
    pass

elif test_case == "init_with_value":
    # TODO: Teste die Initialisierung mit einem spezifischen Wert
    # Erstelle einen Counter mit dem Initialwert 10 und gib ihn aus
    # Hinweis: print() ruft implizit __str__ auf, aber unser Fokus liegt hier auf dem Testen von __init__
    # Erwartete Ausgabe: "Count: 10"
    pass


elif test_case == "addition":
    # TODO: Teste die Additionsoperation
    # Erstelle einen Counter mit dem Wert 3, addiere 7 dazu und gib das Ergebnis aus
    # Erwartete Ausgabe: "Count: 10"
    pass

elif test_case == "chained_addition":
    # TODO: Teste verkettete Additionsoperationen
    # Erstelle einen Counter mit dem Wert 1, addiere 2, addiere dann 3 zum Ergebnis und gib es aus
    # Erwartete Ausgabe: "Count: 6"
    pass

elif test_case == "negative_values":
    # TODO: Teste mit negativen Werten
    # Erstelle einen Counter mit dem Wert -5 und gib ihn aus
    # Addiere dann -3 dazu und gib das Ergebnis aus
    # Erwartete Ausgaben: "Count: -5" und "Count: -8"
    pass

elif test_case == "zero_value":
    # TODO: Teste mit Nullwerten
    # Erstelle einen Counter mit dem Wert 0, addiere 0 und gib ihn aus
    # Erwartete Ausgabe: "Count: 0"
    pass

elif test_case == "large_values":
    # TODO: Teste mit großen Werten
    # Erstelle einen Counter mit dem Wert 1000000 und addiere 9000000
    # Erwartete Ausgabe: "Count: 10000000"
    pass

elif test_case == "multiple_counters":
    # TODO: Teste die Interaktion zwischen mehreren Countern
    # Erstelle counter1 mit dem Wert 5 und counter2 mit dem Wert 10
    # Gib beide Counter aus
    # Erwartete Ausgaben: "Count: 5" und "Count: 10"
    pass

elif test_case == "type_validation":
    # TODO: Teste das Hinzufügen verschiedener Typen
    # Versuche, einen Float (2.5) zu einem Counter mit dem Wert 5 zu addieren
    # Erwartete Ausgabe: "Count: 7.5"
    pass
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Object Oriented Programming