Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| de:modul:m320_2024:learningunits:lu03:identitaet [2026/08/30 14:05] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | de:modul:m320_2024:learningunits:lu03:identitaet [2026/08/30 14:05] (aktuell) – ↷ Seite von modul:m320_2024:learningunits:lu03:identitaet nach de:modul:m320_2024:learningunits:lu03:identitaet verschoben msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== LU03b - Gleichheit und Identität ====== | ||
| + | <WRAP center round info 60%> | ||
| + | In der objektorientierten Programmierung muss klar unterschieden werden, ob zwei Objekte | ||
| + | * gleichartig, | ||
| + | * gleich oder | ||
| + | * identisch | ||
| + | sind. | ||
| + | </ | ||
| + | |||
| + | ===== Gleichartig ===== | ||
| + | Objekte werden dann als gleichartig betrachtet, wenn sie vom gleichen Typ (der gleichen Klasse) sind. | ||
| + | |||
| + | Die Gleichartigkeit wird mit der Funktion '' | ||
| + | Unter der Annahme, dass eine Klasse '' | ||
| + | <code python> | ||
| + | if __name__ == " | ||
| + | obj1 = Point(10, | ||
| + | obj2 = Point(5,5) | ||
| + | obj3 = obj1 | ||
| + | # | ||
| + | if isinstance(obj1, | ||
| + | # hier kann nun Code folgen, der das Objekt nutzt | ||
| + | else: | ||
| + | # hier könnte eine Fehlermeldung folgen | ||
| + | </ | ||
| + | Da '' | ||
| + | |||
| + | ===== Gleichheit ===== | ||
| + | Zwei Objekte sind gleich, wenn sie | ||
| + | * vom gleichen Typ (Klasse) **und** | ||
| + | * alle Attribute die gleichen Werte enthalten. | ||
| + | |||
| + | ==== __eq__ ==== | ||
| + | |||
| + | Um zwei Objekte auf Gleichheit zu prüfen, muss die Klasse die Methode '' | ||
| + | In dieser Methode codieren wir die Logik um die Gleichheit zweiter Objekte zu prüfen. | ||
| + | Hat die Klasse keine Methode '' | ||
| + | |||
| + | <code python> | ||
| + | class Point: | ||
| + | def __init__(self, | ||
| + | self._xposition = xposition | ||
| + | self._yposition = yposition | ||
| + | | ||
| + | def __eq__(self, | ||
| + | if not isinstance(other, | ||
| + | return NotImplemented | ||
| + | if self._xposition == other.xposition and self._yposition == other.yposition: | ||
| + | return true | ||
| + | return false | ||
| + | | ||
| + | if __name__ == " | ||
| + | obj1 = Point(10, | ||
| + | obj2 = Point(5,5) | ||
| + | obj3 = Point(10, | ||
| + | if ob1 == obj2: | ||
| + | # bei Identität von obj1 und obj2 wird dieser Code ausgeführt | ||
| + | else: | ||
| + | print(' | ||
| + | #-- | ||
| + | if obj1 == obj3: | ||
| + | print(' | ||
| + | else: | ||
| + | # sind obj1 und obj3 nicht gleich, wird dieser Code ausgeführt | ||
| + | </ | ||
| + | |||
| + | In diesem Beispiel gelten '' | ||
| + | |||
| + | ===== Identität ===== | ||
| + | Objektreferenzen werden dann als identisch betrachtet, wenn sie auf ein und das selbe Objekt verweisen. | ||
| + | Die Identität einer Referenz wird über den Operator '' | ||
| + | |||
| + | <code python> | ||
| + | if __name__ == " | ||
| + | obj1 = Point(10, | ||
| + | obj2 = Point(5,5) | ||
| + | obj3 = obj1 | ||
| + | if ob1 is obj2: | ||
| + | # bei Identität von obj1 und obj2 wird dieser Code ausgeführt | ||
| + | else: | ||
| + | print(' | ||
| + | #-- | ||
| + | if obj1 is obj3: | ||
| + | print(' | ||
| + | else: | ||
| + | # sind obj1 und obj3 nicht identisch, wird dieser Code ausgeführt | ||
| + | </ | ||
| + | Der erste Vergleich liefert '' | ||
| + | Beim zweiten Vergleich wird '' | ||
| + | |||
| + | |||
| + | ---- | ||
| + | {{tag> | ||
| + | [[https:// | ||