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__ aufAusgabe:
Python Programming by John Smith
Python Programming by John SmithOhne __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 aufAusgabe:
350Wichtiger 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.
Aufgabe
EinfachIn 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ützendriver.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 mitstr()oderprint()aufgerufen__len__- Wird bei Verwendung der Funktionlen()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 aufOhne __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"
passDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Object Oriented Programming
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktor-Methode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDie super()-FunktionMethoden überschreibenMehrfachvererbungMethod Resolution OrderZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden
Einführung in Magic MethodsOperator-ÜberladungMagic Methods für ContainerRückblick - Eigene Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung2Dekoratoren
Einführung in DekoratorenProperty-DekoratorStatischer Methoden-DekoratorKlassenmethoden-Dekorator5Polymorphismus
Methoden-Überschreiben vertieftDuck TypingAbstrakte Klassen und MethodenInterface-DesignZusammenfassung – Formen-Rechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische und KlassenmethodenKlassendekoratorenContext Manager3Klasseneigenschaften
Instanz- vs. KlassenvariablenProperty-DekoratorenPrivate AttributeZusammenfassung – Bankkonto-Manager6Kapselung
Public, Protected, Private MemberZugriffsmodifikatorenInformation HidingProperty-Decorators für FortgeschritteneZusammenfassung - Studentenverwaltungssystem12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen