Tôi đã đoạn mã sau, mà là làm cho tôi gãi đầu của tôi -Tại sao đối tượng của tôi bị xóa khỏi danh sách khi __eq__ không được gọi?
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))
nào mang lại kết quả như sau -
before [a, b, c, d]
comparing a to d (False)
comparing b to d (False)
comparing c to d (False)
after [a, b, c]
Tại sao không eq()
xuất ra comparing d to d (True)
?
Lý do tôi khỉ vá __eq__
thay vì chỉ đơn giản là thực hiện nó trong lớp Element
của tôi là vì tôi đang thử nghiệm cách khỉ vá làm việc trước khi tôi thực hiện nó với một trong những thư viện Tôi đang sử dụng.
Cảm ơn bạn. Câu trả lời rất rõ ràng. –