Sovraccarico operatori: confronto tra oggetti

Introduzione alla programmazione orientata agli oggetti in Python

George Boorman

Curriculum Manager, DataCamp

Uguaglianza tra oggetti

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

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

# Verifica di uguaglianza customer1 == customer2
False
Introduzione alla programmazione orientata agli oggetti in Python

Uguaglianza tra oggetti

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
Introduzione alla programmazione orientata agli oggetti in Python

Le variabili sono riferimenti

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>
  • L'output di print() indica il blocco di memoria a cui è assegnata la variabile
  • == confronta i riferimenti, non i dati
Introduzione alla programmazione orientata agli oggetti in Python

Confronto personalizzato

# Due liste diverse con gli stessi dati
list_one = [1,2,3]
list_two = [1,2,3]

list_one == list_two
True
Introduzione alla programmazione orientata agli oggetti in Python

Il metodo __eq__()

  • __eq__() viene chiamato quando 2 oggetti di una classe sono confrontati con ==
  • Accetta 2 argomenti, self e other — oggetti da confrontare
  • Restituisce un booleano
Introduzione alla programmazione orientata agli oggetti in Python

Il metodo __eq__()

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

# Chiamato quando si usa == def __eq__(self, other):
# Stampa print("__eq__() is called") # Restituisce True se tutti gli attributi coincidono return (self.acc_id == other.acc_id) and (self.name == other.name)
Introduzione alla programmazione orientata agli oggetti in Python

Confronto di oggetti

# Due oggetti uguali
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(123, "Maryam Azar")

customer1 == customer2
__eq__() is called
True
# Due oggetti diversi - id differenti
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(456, "Maryam Azar")

customer1 == customer2
__eq__() is called
False
Introduzione alla programmazione orientata agli oggetti in Python

Verifica dei tipi

  • E se due oggetti di classi diverse hanno stessi attributi e valori?
    • Python li valuterà uguali
class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = idacc_id name

    def __eq__(self, other):
        # Restituisce True se gli oggetti hanno gli stessi attributi
        # e sono dello stesso tipo
        return (self.acc_id == other.acc_id) and (self.name == other.name)\
            and (type(self) == type(other))
Introduzione alla programmazione orientata agli oggetti in Python

Altri operatori di confronto

Operatore Metodo
== __eq__()
!= __ne__()
>= __ge__()
<= __le__()
> __gt__()
< __lt__()
  • Personalizza definendoli nella classe
Introduzione alla programmazione orientata agli oggetti in Python

Passons à la pratique !

Introduzione alla programmazione orientata agli oggetti in Python

Preparing Video For Download...