У меня есть следующий код, который заставляет меня почесывать голову -
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
, заключается в том, что я тестирую, как работает патч обезьяны, прежде чем я реализую его с помощью одной из библиотек, которые я использую.