나는 서브 클래스가 tuple
인 클래스가 있습니다. 그 클래스의 인스턴스를 set
의 요소로 사용하고 싶습니다만, 오류가없는 유형이라는 오류가 발생합니다. 나는 이것이 __eq__
과 __ne__
방법을 오버라이드했기 때문에 이것이라고 생각합니다. 내 형식의 해시 가능성을 복원하려면 어떻게해야합니까? 나는 파이썬 3.2를 사용하고있다.튜플의 하위 클래스를 파이썬에서 해시 가능하게 만드는 방법은 무엇입니까?
답변
당신은 타입 해시 가능이 필요합니다. 이것은 터플에서 파생되는 클래스에 __hash__()
멤버 함수를 구현하는 것을 의미합니다.
:
class test(tuple):
def __eq__(self,comp):
return self[0] == comp[0]
def __ne__(self,comp):
return self[0] != comp[0]
def __hash__(self):
return hash(self[0])
을 그리고 이것은 지금 모습입니다 :
>>> set([test([1,]),test([2,]),test([3,])])
{(1,), (2,), (3,)}
>>> hash(test([1,]))
1
참고 : 당신은 절대적으로 관계를 이해하기 위해, __hash__()
기능에 대한 설명서를 읽어야합니다 비교 연산자와 해시 계산 사이. 동일한 비교
'tuple'의 원래 해시 함수를 사용할 수 있습니다 :'tuple .__ hash __ (self)' –
물론 가능합니다. 당신은 또한 슈퍼 클래스'super (test, self) .__ hash __ (self)', 그 밖의 다른 것들을 사용할 수 있습니다 ... –
당신의 예제는 장난 꾸러기입니다 - "유일한 필수 속성은 같은 것을 비교하는 객체들이 동일하다는 것입니다 해시 값 "http://docs.python.org/reference/datamodel.html#object.__hash__ –
객체는 same hash value
그래서 당신이 더 나은이
class test(tuple):
def __eq__(self,comp):
return self[0] == comp[0]
def __ne__(self,comp):
return self[0] != comp[0]
def __hash__(self):
return hash((self[0],))
등이 될 것입니다 평등을
아드의 예를 비교하기 위해 사용하는 속성에 해시를 기반으로하는 것이 좋습니다 있어야한다
우리가 관심을 갖는 것들을 포함하는 튜플의 해시를 활용하면된다.
그것은'__ne__'이 아니라'__ne__'입니다. – user4815162342
- 1. 클래스를 반복 가능하게 만드는 방법은 무엇입니까?
- 2. 공장 클래스를 확장 가능하게 만드는 방법은 무엇입니까?
- 3. 파이썬에서 사전 하위 클래스를 비움
- 4. C#에서 하위 클래스를 만드는 방법은 무엇입니까?
- 5. Qt의 클래스를 스크립팅 가능 및 직렬화 가능하게 만드는 방법은 무엇입니까?
- 6. 정적 클래스를 테스트 가능하게 만드는 가장 좋은 방법은 무엇입니까?
- 7. NameValueCollection을 직렬화 가능하게 만드는 방법은 무엇입니까?
- 8. UIScrollView를 항상 스크롤 가능하게 만드는 방법은 무엇입니까?
- 9. 파이썬에서 glib.Source를 만드는 방법은 무엇입니까?
- 10. FrameLayout을 포커스 가능하게 만드는 방법은 무엇입니까?
- 11. 앱을 자동으로 스캔 가능하게 만드는 방법은 무엇입니까?
- 12. 터미널을 스크롤 가능하게 만드는 방법은 무엇입니까?
- 13. 이 테이블을 스크롤 가능하게 만드는 방법은 무엇입니까?
- 14. JPanel을 스크롤 가능하게 만드는 방법은 무엇입니까?
- 15. 보기 컨트롤러를 스크롤 가능하게 만드는 방법은 무엇입니까?
- 16. 모달보기를 스크롤 가능하게 만드는 방법은 무엇입니까?
- 17. Silverlight DataGrid를 편집 가능하게 만드는 방법은 무엇입니까?
- 18. 경로를 구성 가능하게 만드는 방법은 무엇입니까?
- 19. 부분보기를 구성 가능하게 만드는 방법은 무엇입니까?
- 20. 텍스트 영역을 편집 가능하게 만드는 방법은 무엇입니까?
- 21. 사용자를 하위 도메인에 로그인하고 다른 하위 도메인에서 세션을 사용 가능하게 만드는 방법은 무엇입니까?
- 22. Eclipse Java EE에서 하위 클래스를 만드는 방법은 무엇입니까?
- 23. 대기중인 클래스를 만드는 방법은 무엇입니까?
- 24. 클래스를 bean으로 만드는 방법은 무엇입니까?
- 25. Python에서 클래스를 만드는 방법은 무엇입니까?
- 26. 같은 길이 튜플의 튜플의 마지막 열을 "잘라내"는 방법은 무엇입니까?
- 27. NSOutputStream의 하위 클래스를 만드는 방법
- 28. 모든 네임 스페이스에서 유형을 사용 가능하게 만드는 방법은 무엇입니까?
- 29. QStyledItemDelegate를 사용하여 뷰의 일부만을 편집 가능하게 만드는 방법은 무엇입니까?
- 30. 유효성 검사 클래스를 확장 가능하게 만들려면 어떻게해야합니까?
[''__hash__()''] (http://docs.python.org/reference/datamodel.html#object.__hash__)을 구현해야합니다. 검색을 수행하면 가장 먼저 발견 할 수 있습니다. 이. –
[The docs] (http://docs.python.org/2/reference/datamodel.html#object.__hash__)는 해시 가능 클래스에서 파생되었지만 예를 들어 상속 된 클래스를 말합니다. '__eq __()'을 해시 할 수 있으려면'__hash __()'을 오버라이드해야합니다. 이 행동은 전혀 분명한 것이 아니기 때문에 정당한 질문입니다. 다소 국한 될 수도 있지만 너무 많이 생각하지 않습니다. 그러므로 다시 투표 할 내 표결. – pillmuncher