Ho il codice seguente, che mi sta facendo gratto la testa -Perché il mio oggetto viene rimosso correttamente da un elenco quando __eq__ non viene chiamato?
class Element:
def __init__(self, name):
self.name = name
def __repr__(self):
return self.name
def eq(self, other):
print('comparing {} to {} ({})'.format(self.name,
other.name,
self.name == other.name))
return self.name == other.name
Element.__eq__ = eq
elements = [
Element('a'),
Element('b'),
Element('c'),
Element('d')
]
print('before {}'.format(elements))
elements.remove(elements[3])
print('after {}'.format(elements))
da cui si ricava il seguente risultato -
before [a, b, c, d]
comparing a to d (False)
comparing b to d (False)
comparing c to d (False)
after [a, b, c]
Perché non eq()
è l'output comparing d to d (True)
?
La ragione per cui sono scimmia patching __eq__
invece di implementarlo nella mia classe Element
è perché sto testando come scimmia patch funziona prima a implementare con una delle librerie che sto usando.
Grazie. Risposta molto chiara –