본문 바로가기
파이썬

파이썬 set ([])은 두 객체가 같은지 어떻게 확인합니까? 이것을 사용자 정의하기 위해 객체는 어떤 메소드를 정의해야합니까?

by º기록 2020. 10. 30.
반응형

파이썬에서 '컨테이너'객체 또는 클래스를 만들어야합니다.이 클래스는 내가 정의한 다른 객체의 기록을 유지합니다. 이 컨테이너의 한 가지 요구 사항은 두 개체가 동일한 것으로 간주되면 하나 (둘 중 하나)가 제거된다는 것입니다. 내 첫 번째 생각은 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

 

 

반응형

댓글