Я следующий код, который делает меня чесать голову -Почему мой объект правильно удаляется из списка, когда __eq__ не вызывается?
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))
что дает следующий результат -
before [a, b, c, d]
comparing a to d (False)
comparing b to d (False)
comparing c to d (False)
after [a, b, c]
Почему не eq()
выводящий comparing d to d (True)
?
Причина, по которой я пытаюсь переупаковать обезьяну __eq__
, вместо того чтобы просто реализовать ее в моем классе Element
, потому что я тестирую, как работает патч обезьяны, прежде чем я реализую его с помощью одной из библиотек, которые я использую.
спасибо. Очень ясный ответ. –