Operatoroverloading: objecten vergelijken

Introductie tot objectgeoriënteerd programmeren in Python

George Boorman

Curriculum Manager, DataCamp

Objectgelijkheid

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

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

# Gelijkheid checken customer1 == customer2
False
Introductie tot objectgeoriënteerd programmeren in Python

Objectgelijkheid

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
Introductie tot objectgeoriënteerd programmeren in Python

Variabelen zijn referenties

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>
  • De uitvoer van print() verwijst naar het geheugensegment van de variabele
  • == vergelijkt referenties, niet data
Introductie tot objectgeoriënteerd programmeren in Python

Aangepaste vergelijking

# Twee verschillende lijsten met dezelfde data
list_one = [1,2,3]
list_two = [1,2,3]

list_one == list_two
True
Introductie tot objectgeoriënteerd programmeren in Python

De methode __eq__()

  • __eq__() wordt aangeroepen als 2 objecten met == worden vergeleken
  • Neemt 2 argumenten aan, self en other — de objecten om te vergelijken
  • Geeft een Boolean terug
Introductie tot objectgeoriënteerd programmeren in Python

De methode __eq__()

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

# Wordt aangeroepen bij == def __eq__(self, other):
# Uitvoer print("__eq__() is called") # Geeft True terug als alle attributen gelijk zijn return (self.acc_id == other.acc_id) and (self.name == other.name)
Introductie tot objectgeoriënteerd programmeren in Python

Objecten vergelijken

# Twee gelijke objecten
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(123, "Maryam Azar")

customer1 == customer2
__eq__() is called
True
# Twee ongelijke objecten - verschillende ids
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(456, "Maryam Azar")

customer1 == customer2
__eq__() is called
False
Introductie tot objectgeoriënteerd programmeren in Python

Types controleren

  • Wat als twee objecten van verschillende klassen dezelfde attributen en waarden hebben?
    • Python beoordeelt ze als gelijk
class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = idacc_id name

    def __eq__(self, other):
        # Geeft True terug als de objecten dezelfde attributen hebben
        # en van hetzelfde type zijn
        return (self.acc_id == other.acc_id) and (self.name == other.name)\
            and (type(self) == type(other))
Introductie tot objectgeoriënteerd programmeren in Python

Andere vergelijkingsoperators

Operator Methode
== __eq__()
!= __ne__()
>= __ge__()
<= __le__()
> __gt__()
< __lt__()
  • Pas aan door ze in een class te definiëren
Introductie tot objectgeoriënteerd programmeren in Python

Laten we oefenen!

Introductie tot objectgeoriënteerd programmeren in Python

Preparing Video For Download...