Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Objetos se alternam na chamada do método __eq__

Percebi que na comparação entre objetos de classe mãe e filha, a ordem dos parâmetros assumida no método eq é alterada.

Exemplo: Digamos que eu tenho uma classe Banco e uma sub-classe Conta_poupanca(Banco)

class Banco:
    def __init__(self, num):
        self._num_conta = num
        self._saldo = 0

    def __str__(self):
        return f'#Conta = {self._num_conta}, Saldo = {self._saldo}#'

    def __eq__(self, obj2):
        print(f'Self = {self} e obj2 = {obj2}')
        return True

class Conta_poupanca(Banco):
    pass

Estanciando um objeto da classe Banco, outro da classe Conta_poupanca e chamando a comparação:

ct_banco = Banco(9000)
ct_poup = Conta_poupanca(1000)

print(ct_banco == ct_poup)

O resultado será: Self = #Conta = 1000, Saldo = 0# e obj2 = #Conta = 9000, Saldo = 0#

Ou seja, os objetos passados como parâmetro tiveram a ordem trocada na execução do método.

Isto é por conta do RMO (Method Resolution Order) que altera a ordem dos parâmetros por conta da hierarquia das classes?

1 resposta
solução!

Oii Carlos, como você está? Espero que esteja tudo bem ^-^

O Python dará preferência para a implementação da classe mais específica que no caso é a subclasse (classe filha), pois o método __eq__ pode ser sobrescrito na classe filha, então, primeiro olhamos para ele ao invés de olharmos para o método mais geral, o da classe mãe.

Qualquer dúvida é só falar.

Grande abraço!