2017-03-16 67 views
-1

我定義類MyClass()調用__hash __()方法

import random 
class MyClass(): 
    def __init__(self, value): 
     self.value = value 
    def __hash__(self): 
     return random.randin(1, 10) 
x = MyClass() 

我知道,__init__被稱爲後自動我宣佈x = MyClass()。但是__hash__呢?沒有被x.__hash__()明確調用它是否工作?
是每一次與__開始自動調用或程序來決定何時打電話給他們的方法?
我經歷了許多資料去尋找答案,但unsuccesssfuly。

感謝您的解答!

+1

字面上第一https://docs.python.org的句子/3/reference/datamodel.html#object.__hash__是「通過內置函數散列()和對哈希集合成員的操作稱爲」。有什麼不清楚的呢? –

回答

0

從Python文檔:

通過內置函數散列()調用和對散列集合包括集,frozenset,和字典的成員操作。 __hash __()應該返回一個整數。唯一需要的屬性是比較相等的對象具有相同的散列值;

參考:https://docs.python.org/3/reference/datamodel.html#object.__hash__

另外,請不要返回從__hash __隨機數()。

+0

「還有,請不要從__hash __返回隨機數()。」這是一個非常有趣的調試會話的方法。 – DeepSpace

-1

不,__hash__不會自動調用。看看the documentation for this method

通過內置函數散列()調用和對 散列收藏,包括集,frozenset和字典成員操作。

所以這種方法將被稱爲萬一有人做hash(x)

Btw。返回一個隨機數是一個壞主意:

僅有一個要求,就是其比較相等的對象具有 相同的哈希值