Gleichheit von Objekten
Da wir nun mit Klassen die Möglichkeit haben eigene Datentypen zu definieren, müssen wir uns auch Fragen, wann zwei Objekte gleich sind. Diese Frage ist überraschend subtil. Das folgende Video diskutiert warum das so ist, wie Python damit umgeht, und wie man Gleichheit für seine eigenen Datentypen definiert.
In diesem Video haben wir jedoch noch ein Detail unterschlagen. Was passiert
denn, wenn wir Instanzen zweier unterschiedlicher Klassen haben und diese auf Gleichheit überprüfen wollen? In diesem Falls sollte die Methode __eq__
immer False
zurückgeben. In der Implementation im Video würde dies jedoch zu einem Fehler führen. Um auch diesen Fall noch abzufangen,
müssen wir zusätzlich überprüfen, ob ein Objekt eine Instanz einer gegebenen Klasse ist. Dies machen wir mit der Funktion isinstance
. Der Aufruf
isinstance(o, Date)
würde zum Beispiel überprüfen, ob das Objekt o
eine Instanz der Klasse Date
ist. Die vollständig
korrekte Implementation der __eq__
Methode ist
in folgendem Trinket gegeben. Experimentieren Sie doch gleich selber damit.
Experiment
- Schreiben Sie die Methode zum Vergleichen von Objekten der Klasse
Date
so um, dass diese nur das Jahr vergleicht.
Fragen und Kommentare
Haben Sie Fragen oder Kommentare zu diesem Artikel? Nutzen Sie das Forum und helfen Sie sich und Ihren Mitstudierenden dieses Thema besser zu verstehen.