Operatorüberladung: Objekte vergleichen

Einführung in objektorientierte Programmierung in Python

George Boorman

Curriculum Manager, DataCamp

Objektgleichheit

class Customer:
    def __init__(self, name, balance):
        self.name, self.balance = name, balance  

customer1 = Customer("Maryam Azar", 3000)
customer2 = Customer("Maryam Azar", 3000)

# Auf Gleichheit prüfen customer1 == customer2
False
Einführung in objektorientierte Programmierung in Python

Objektgleichheit

class Customer:
    def __init__(self, name, balance, acc_id):
        self.name, self.balance = name, balance
        self.acc_id = acc_id    

customer1 = Customer("Maryam Azar", 3000, 123)
customer2 = Customer("Maryam Azar", 3000, 123)

customer1 == customer2
False
Einführung in objektorientierte Programmierung in Python

Variablen sind Referenzen

customer_one = Customer("Maryam Azar", 3000, 123)
customer_two = Customer("Maryam Azar", 3000, 123)

print(customer_one)
<__main__.Customer at 0x1f8598e2e48>
print(customer_two)
<__main__.Customer at 0x1f8598e2240>
  • Die Ausgabe von print() verweist auf den Speicherbereich der Variablen
  • == vergleicht Referenzen, nicht Daten
Einführung in objektorientierte Programmierung in Python

Eigener Vergleich

# Zwei verschiedene Listen mit denselben Daten
list_one = [1,2,3]
list_two = [1,2,3]

list_one == list_two
True
Einführung in objektorientierte Programmierung in Python

Die Methode __eq__()

  • __eq__() wird bei == zwischen zwei Objekten einer Klasse aufgerufen
  • Nimmt zwei Argumente: self und other – zu vergleichende Objekte
  • Gibt einen Booleschen Wert zurück
Einführung in objektorientierte Programmierung in Python

Die Methode __eq__()

class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = acc_id, name

# Wird bei == aufgerufen def __eq__(self, other):
# Ausgabe print("__eq__() is called") # Gibt True zurück, wenn alle Attribute übereinstimmen return (self.acc_id == other.acc_id) and (self.name == other.name)
Einführung in objektorientierte Programmierung in Python

Vergleich von Objekten

# Zwei gleiche Objekte
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(123, "Maryam Azar")

customer1 == customer2
__eq__() is called
True
# Zwei ungleiche Objekte – unterschiedliche IDs
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(456, "Maryam Azar")

customer1 == customer2
__eq__() is called
False
Einführung in objektorientierte Programmierung in Python

Typen prüfen

  • Was, wenn zwei Objekte verschiedener Klassen dieselben Attribute und Werte haben?
    • Python wertet sie als gleich
class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = idacc_id name

    def __eq__(self, other):
        # Gibt True zurück, wenn die Objekte dieselben Attribute haben
        # und vom selben Typ sind
        return (self.acc_id == other.acc_id) and (self.name == other.name)\
            and (type(self) == type(other))
Einführung in objektorientierte Programmierung in Python

Weitere Vergleichsoperatoren

Operator Methode
== __eq__()
!= __ne__()
>= __ge__()
<= __le__()
> __gt__()
< __lt__()
  • Durch Definition in einer Klasse anpassbar
Einführung in objektorientierte Programmierung in Python

Lass uns üben!

Einführung in objektorientierte Programmierung in Python

Preparing Video For Download...