Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| modul:m320_2024:learningunits:lu03:identitaet [2024/08/13 07:24] – msuter | modul:m320_2024:learningunits:lu03:identitaet [2024/08/13 08:03] (aktuell) – msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== LU03b - Gleichheit und Identität ====== | ====== LU03b - Gleichheit und Identität ====== | ||
| <WRAP center round info 60%> | <WRAP center round info 60%> | ||
| - | In der objektorientierten Programmierung muss klar unterschieden werden, ob zwei Objekte | + | In der objektorientierten Programmierung muss klar unterschieden werden, ob zwei Objekte |
| + | * gleichartig, | ||
| * gleich oder | * gleich oder | ||
| * identisch | * identisch | ||
| Zeile 8: | Zeile 9: | ||
| - | ===== Gleichheit | + | ===== Gleichartig |
| - | Objektreferenzen | + | Objekte |
| - | Die Gleichheit | + | Die Gleichartigkeit |
| Unter der Annahme, dass eine Klasse '' | Unter der Annahme, dass eine Klasse '' | ||
| <code python> | <code python> | ||
| Zeile 25: | Zeile 26: | ||
| </ | </ | ||
| Da '' | 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 ===== | ===== Identität ===== | ||
| Zeile 31: | Zeile 73: | ||
| <code python> | <code python> | ||
| + | if __name__ == " | ||
| + | obj1 = Point(10, | ||
| + | obj2 = Point(5,5) | ||
| + | obj3 = obj1 | ||
| if ob1 is obj2: | if ob1 is obj2: | ||
| # bei Identität von obj1 und obj2 wird dieser Code ausgeführt | # bei Identität von obj1 und obj2 wird dieser Code ausgeführt | ||