Spezielle Methoden sind in Python integrierte Methoden, die mit doppelten Unterstrichen vor und nach dem Methodennamen gekennzeichnet sind (z. B. `__init__`). Diese Methoden werden automatisch aufgerufen, wenn bestimmte Aktionen mit Objekten einer Klasse ausgeführt werden. Operator-Überladung ist das Anpassen des Verhaltens von Operatoren (wie +, -, *, /) für benutzerdefinierte Klassen. In diesem Kapitel werden wir uns ansehen, wie Du spezielle Methoden in Deinen Klassen definieren und Operator-Überladung nutzen kannst.
Spezielle Methoden
Einige der häufig verwendeten speziellen Methoden sind:
– `__init__(self, …)`: Wird aufgerufen, wenn ein Objekt der Klasse erstellt wird.
– `__str__(self)`: Wird aufgerufen, wenn eine Zeichenkettenrepräsentation des Objekts benötigt wird (z. B. bei Verwendung von `print(obj)`).
– `__repr__(self)`: Wird aufgerufen, um eine formelle Zeichenkettenrepräsentation des Objekts zurückzugeben (z. B. im interaktiven Modus oder in Debugging-Sitzungen).
Beispiel:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}, {self.age} Jahre alt"
def __repr__(self):
return f"Person('{self.name}', {self.age})"
Operator-Überladung
Um das Verhalten von Operatoren für benutzerdefinierte Klassen anzupassen, müssen wir spezielle Methoden definieren, die den jeweiligen Operator repräsentieren. Einige Beispiele:
– `__add__(self, other)`: Wird aufgerufen, wenn das `+`-Operator verwendet wird.
– `__sub__(self, other)`: Wird aufgerufen, wenn das `-`-Operator verwendet wird.
– `__mul__(self, other)`: Wird aufgerufen, wenn das `*`-Operator verwendet wird.
– `__truediv__(self, other)`: Wird aufgerufen, wenn das `/`-Operator verwendet wird.
Beispiel:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __sub__(self, other):
return Vector(self.x - other.x, self.y - other.y)
def __str__(self):
return f"({self.x}, {self.y})"
In diesem Beispiel haben wir eine `Vector`-Klasse erstellt, die zwei spezielle Methoden für die `+`- und `-`-Operatoren definiert. Jetzt können wir Vektoren auf einfache Weise addieren und subtrahieren:
v1 = Vector(1, 2)
v2 = Vector(3, 4)
v3 = v1 + v2
v4 = v1 - v2
print(v3) # Ausgabe: (4, 6)
print(v4) # Ausgabe: (-2, -2)
Durch das Implementieren von speziellen Methoden und das Anpassen von Operator-Überladung kannst Du Deine benutzerdefinierten Klassen intuitiver und benutzerfreundlicher gestalten. Dabei kannst Du die natürlichen Python-Operatoren verwenden und Deinen Code lesbarer machen.
Vergleichsoperatoren und spezielle Methoden
Auch Vergleichsoperatoren können in Python überladen werden. Hier einige Beispiele für spezielle Methoden, die mit Vergleichsoperatoren korrespondieren:
– `__eq__(self, other)`: Wird aufgerufen, wenn der `==`-Operator verwendet wird.
– `__ne__(self, other)`: Wird aufgerufen, wenn der `!=`-Operator verwendet wird.
– `__lt__(self, other)`: Wird aufgerufen, wenn der `<`-Operator verwendet wird.
– `__le__(self, other)`: Wird aufgerufen, wenn der `<=`-Operator verwendet wird.
– `__gt__(self, other)`: Wird aufgerufen, wenn der `>`-Operator verwendet wird.
– `__ge__(self, other)`: Wird aufgerufen, wenn der `>=`-Operator verwendet wird.
Beispiel:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return self.age == other.age
def __lt__(self, other):
return self.age < other.age
Mit diesen speziellen Methoden können wir Personen-Objekte direkt vergleichen:
p1 = Person("Alice", 30)
p2 = Person("Bob", 25)
print(p1 == p2) # Ausgabe: False
print(p1 < p2) # Ausgabe: False
print(p1 > p2) # Ausgabe: True
Indem Du spezielle Methoden und Operator-Überladung in Deinen Python-Klassen verwendest, kannst Du Deinen Code besser strukturieren und natürlicher ausdrücken. Es ermöglicht eine bessere Integration Deiner benutzerdefinierten Klassen in die Python-Programmiersprache und macht sie leichter verständlich und anwendbar für andere Entwickler.