Tôi cần tạo một đối tượng hoặc lớp 'vùng chứa' bằng Python, nó lưu giữ bản ghi của các đối tượng khác mà tôi cũng xác định. Một yêu cầu của vùng chứa này là nếu hai đối tượng được coi là giống hệt nhau, một (một trong hai) sẽ bị loại bỏ. Suy nghĩ đầu tiên của tôi là sử dụng a set([])
làm đối tượng chứa, để hoàn thành yêu cầu này.
Tuy nhiên, tập hợp không loại bỏ một trong hai trường hợp đối tượng giống hệt nhau. Tôi phải xác định những gì để tạo một?
Đây là mã Python.
class Item(object):
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
def __repr__(self):
return "Item(%s, %s)" % (self.foo, self.bar)
def __eq__(self, other):
if isinstance(other, Item):
return ((self.foo == other.foo) and (self.bar == other.bar))
else:
return False
def __ne__(self, other):
return (not self.__eq__(other))
Thông dịch viên
>>> set([Item(1,2), Item(1,2)])
set([Item(1, 2), Item(1, 2)])
Rõ ràng rằng __eq__()
, x == y
phương thức được gọi bởi , không phải là phương thức được gọi bởi tập hợp. Được gọi là gì? Tôi phải xác định phương pháp nào khác?
Lưu ý: Các Item
s phải vẫn có thể thay đổi và có thể thay đổi, vì vậy tôi không thể cung cấp một __hash__()
phương thức. Nếu đây là cách duy nhất để làm điều đó, thì tôi sẽ viết lại để sử dụng các bất biến Item
s.