반응형
파이썬에서 '컨테이너'객체 또는 클래스를 만들어야합니다.이 클래스는 내가 정의한 다른 객체의 기록을 유지합니다. 이 컨테이너의 한 가지 요구 사항은 두 개체가 동일한 것으로 간주되면 하나 (둘 중 하나)가 제거된다는 것입니다. 내 첫 번째 생각은 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)])
x == y
에 의해 호출되는 __ eq __ ()
는 집합에 의해 호출되는 메서드가 아님이 분명합니다. 무엇이라고하나요? 다른 어떤 방법을 정의해야합니까?
참고 : Item
은 변경 가능한 상태로 유지되어야하며 변경 될 수 있으므로 __ hash __ ()
<를 제공 할 수 없습니다. em> 메서드. 이것이 유일한 방법이라면 변경 불가능한 Item
을 사용하도록 다시 작성하겠습니다.
해결 방법
__ hash __ ()
메서드를 제공해야합니다. 그러나 Item
의 변경 가능한 속성에 의존하지 않는 방식으로 코딩 할 수 있습니다.
참조 페이지 https://stackoverflow.com/questions/3942303
반응형
'파이썬' 카테고리의 다른 글
파이썬에서 목록을 어떻게 되돌릴 수 있습니까? (0) | 2020.10.31 |
---|---|
파이썬 함수를 호출 할 때 목록을 * args로 변환 (0) | 2020.10.30 |
파이썬 Python unittest를 사용하여 파일을 작성하는 함수의 단위 테스트를 수행하는 방법 (0) | 2020.10.30 |
파이썬 UnicodeEncodeError : 'latin-1'코덱은 문자를 인코딩 할 수 없습니다. (0) | 2020.10.30 |
파이썬 유형 힌트로 "nullable"반환 유형을 지정하는 방법 (0) | 2020.10.30 |
댓글