Skip to main content

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.