Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
modul:m320_2024:learningunits:lu03:identitaet [2024/08/13 07:24] msutermodul: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 des gleichen Typs (der gleichen Klasse)+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 werden dann als gleich betrachtet, wenn sie auf Objekte vom gleichen Typ (der gleichen Klasse) verweisen.+Objekte werden dann als gleichartig betrachtet, wenn sie vom gleichen Typ (der gleichen Klasse) sind.
  
-Die Gleichheit wird mit der Funktion ''isinstance'' überprüft.+Die Gleichartigkeit wird mit der Funktion ''isinstance'' überprüft.
 Unter der Annahme, dass eine Klasse ''Point'' existiert, wird folgender Code ausgeführt: Unter der Annahme, dass eine Klasse ''Point'' existiert, wird folgender Code ausgeführt:
 <code python> <code python>
Zeile 25: Zeile 26:
 </code> </code>
 Da ''obj1'' vom Typ ''Point'' ist, wird der Code nach dem if-Befehl ausgeführt. In diesem Beispiel liefert ''isinstance'' für alle 3 Objekte (''obj1'', ''obj2'' und ''obj3'') den Wert ''True''. Da ''obj1'' vom Typ ''Point'' ist, wird der Code nach dem if-Befehl ausgeführt. In diesem Beispiel liefert ''isinstance'' für alle 3 Objekte (''obj1'', ''obj2'' und ''obj3'') den Wert ''True''.
 +
 +===== 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 ''def __eq__(self, other):'' enthalten.
 +In dieser Methode codieren wir die Logik um die Gleichheit zweiter Objekte zu prüfen.
 +Hat die Klasse keine Methode ''__eq__'', so verhält sich der Vergleich mittels ''=='' wie der Vergleich mittels ''is'' (siehe unten).
 +
 +<code python>
 +class Point:
 +    def __init__(self, xposition, yposition):
 +        self._xposition = xposition
 +        self._yposition = yposition
 +    
 +    def __eq__(self, other):
 +        if not isinstance(other, Point): # don't attempt to compare against unrelated types
 +            return NotImplemented
 +        if self._xposition == other.xposition and self._yposition == other.yposition:
 +            return true
 +        return false
 +        
 +if __name__ == "main":
 +  obj1 = Point(10,10)
 +  obj2 = Point(5,5)
 +  obj3 = Point(10,10)
 +  if ob1 == obj2:
 +    # bei Identität von obj1 und obj2 wird dieser Code ausgeführt
 +  else:
 +    print('obj1 und obj2 sind nicht gleich')
 +  #--
 +  if obj1 == obj3:
 +    print('obj1 und obj3 sind gleich')
 +  else:
 +    # sind obj1 und obj3 nicht gleich, wird dieser Code ausgeführt
 +</code>
 +
 +In diesem Beispiel gelten ''obj1'' und ''obj3'' als gleich, da alle Attributswerte identisch sind.
  
 ===== Identität ===== ===== Identität =====
Zeile 31: Zeile 73:
  
 <code python> <code python>
 +if __name__ == "main":
 +  obj1 = Point(10,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
  • modul/m320_2024/learningunits/lu03/identitaet.1723526655.txt.gz
  • Zuletzt geändert: 2024/08/13 07:24
  • von msuter