Sobrecarga de operadores: comparando objetos

Introdução à programação orientada a objetos em Python

George Boorman

Curriculum Manager, DataCamp

Igualdade de objetos

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

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

# Verificar igualdade customer1 == customer2
False
Introdução à programação orientada a objetos em Python

Igualdade de objetos

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
Introdução à programação orientada a objetos em Python

Variáveis são referências

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>
  • A saída de print() se refere ao bloco de memória atribuído à variável
  • == compara referências, não dados
Introdução à programação orientada a objetos em Python

Comparação personalizada

# Duas listas diferentes com os mesmos dados
list_one = [1,2,3]
list_two = [1,2,3]

list_one == list_two
True
Introdução à programação orientada a objetos em Python

O método __eq__()

  • __eq__() é chamado quando 2 objetos de uma classe são comparados com ==
  • Aceita 2 argumentos: self e other — objetos a comparar
  • Retorna um Booleano
Introdução à programação orientada a objetos em Python

O método __eq__()

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

# Chamado quando se usa == def __eq__(self, other):
# Impressão print("__eq__() is called") # Retorna True se todos os atributos forem iguais return (self.acc_id == other.acc_id) and (self.name == other.name)
Introdução à programação orientada a objetos em Python

Comparação de objetos

# Dois objetos iguais
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(123, "Maryam Azar")

customer1 == customer2
__eq__() is called
True
# Dois objetos diferentes - ids distintos
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(456, "Maryam Azar")

customer1 == customer2
__eq__() is called
False
Introdução à programação orientada a objetos em Python

Verificando tipos

  • E se dois objetos de classes diferentes tiverem os mesmos atributos e valores?
    • O Python os avaliará como iguais
class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = idacc_id name

    def __eq__(self, other):
        # Retorna True se os objetos tiverem os mesmos atributos
        # e forem do mesmo tipo
        return (self.acc_id == other.acc_id) and (self.name == other.name)\
            and (type(self) == type(other))
Introdução à programação orientada a objetos em Python

Outros operadores de comparação

Operador Método
== __eq__()
!= __ne__()
>= __ge__()
<= __le__()
> __gt__()
< __lt__()
  • Personalize definindo dentro da classe
Introdução à programação orientada a objetos em Python

Vamos praticar!

Introdução à programação orientada a objetos em Python

Preparing Video For Download...