2017-05-19 9 views
0

オブジェクトをキーとして使用していますが、値として数値を使用していますが、以下のエラーが発生しています。どんな助け?辞書にキーとしてオブジェクトを追加する

dictの[A] = 1

Traceback (most recent call last): 
    File "detect_hung_connections.py", line 24, in <module> 
    dict = {a:1} 
TypeError: __hash__() takes exactly 3 arguments (1 given) 

マイコードは次のとおりです。

class A: 
    def __init__(self,a,b): 
     self.a = a 
     self.b = b 

    def __hash__(self,a,b): 
     return hash(self.a,self.b) 

    def __eq__(self,other): 
     return (self.a,self.b) == (other.a,other.b) 

dict ={} 
a = A("aa","bb") 

dict[a] = 1 

b = A("aa","bb") 

答えて

4

A.__hash__の署名は余分な引数を取るべきではありません。

def __hash__(self): 
    return hash((self.a,self.b)) 
+0

これはまだ2つの引数を渡しています。 'hash'は1つだけです。あなたの答えが私の画面に表示される約3秒前にこれが失敗するようになった。 :-) – Prune

+0

@Pruneかっこを確認してください。これは、単一のタプルを 'hash()'に渡しています。 – ephemient

+0

。ごめんなさい。私はこれをダウン投票しなかったことをうれしく思っています - それは私の連結よりも一般化されています。 – Prune

1

ハッシュをオブジェクト全体と(冗長的に)2つの属性で呼び出しています。ハッシュ値は1つだけ使用できます。おそらくこれを試してみてください:

これは少なくとも実行をパスします。

関連する問題