파이썬에서 '컨테이너'객체 또는 클래스를 만들어야합니다.이 클래스는 내가 정의한 다른 객체의 기록을 유지합니다. 이 컨테이너의 한 가지 요구 사항은 두 개체가 동일한 것으로 간주되면 하나 (둘 중 하나)가 제거된다는 것입니다. 내 첫 번째 생각은 set([])
이 요구 사항을 완료하기 위해 포함 개체로 를 사용하는 것이 었습니다 .
그러나 집합은 두 개의 동일한 개체 인스턴스 중 하나를 제거하지 않습니다. 계정을 만들려면 무엇을 정의해야합니까?
다음은 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))
통역사
>>> set([Item(1,2), Item(1,2)])
set([Item(1, 2), Item(1, 2)])
에 __eq__()
의해 x == y
호출되는은 세트에 의해 호출되는 메서드가 아님 이 분명합니다 . 무엇이라고하나요? 다른 어떤 방법을 정의해야합니까?
참고 : Item
s는 변경 가능해야하며 변경 될 수 있으므로 메서드를 제공 할 수 없습니다 __hash__()
. 이것이 유일한 방법이라면 불변 Item
의 사용을 위해 다시 작성할 것 입니다.