2011-11-04 4 views
0

나는 __hash__ 함수를 사용하여 클래스 정의를 가지고 있습니다.이 함수는 객체 속성을 사용하여 파이썬 세트에서 비교할 고유 키를 만듭니다.Python - 어떻게 든 중복 데이터 가져 오기

는 해시 방법은 다음과 같습니다

생각할 수있는이 클래스의 중복 된 인스턴스를 만들 수있는이 클래스, 여러 쿼리가 실행되는 구현을 담당하는 모듈 및 기능에 생성 된 큐에서
def __hash__(self): 
return int('%d%s'%(self.id,self.create_key)) 

이 일에 대한 책임은하여 속는 생략 할 수 있는지 확인하기 위해 집합으로 표현된다 :

in_set = set() 
    out_set = set() 
    for inid in inids: 
    ps = Perceptron.getwherelinked(inid,self.in_ents) 

for p in ps: 
    in_set.add(p) 


    for poolid in poolids: 
    ps = Perceptron.getwherelinked(poolid,self.out_ents) 
    for p in ps: 
    out_set.add(p) 
    return in_set.union(out_set) 

(확실하지 들여 쓰기 여기에 엉망이있어 이유)

어쨌든 union 메서드를 호출 했음에도 불구하고 여전히 두 개의 중복 인스턴스를 얻고 있습니다. (문자열 해시을 호출하는 Perceptron 클래스의 메서드를 사용하여) 두 해시는 이론적으로 가능하지 않아야합니다.

set([1630, 1630])

모든 지침

주시면 감사하겠습니다.

답변

4

클래스가 __cmp__() 또는 __eq__() 방법을 정의하지 않는 경우가 __eq__()을 지정하시오 __hash__() 작업 중 하나

source

를 정의해서는 안된다.

1

귀하의 __hash__() 구현에 맞게 __eq__()을 구현해야합니다.