[英]When you override __eq__ in a class, do you also need to override __hash__?
我正在Python 3中制作一個節點類,它將以最小順序的多樹結構存儲。 我覆蓋了__eq__
方法,該方法通過比較兩個唯一的整數實例變量來測試是否相等。
__hash__
嗎? 是的,您必須重寫__hash__
。
一般規則是:如果兩個實例相等(寫成__eq__
,即a==b
為True),則它們必須具有相同的哈希值。 否則,各種各樣的事情都會發生。
另外,對我來說__eq__
還不夠。 至少,您需要定義__lt__
。
我正在Python 3中制作一個節點類,它將以最小順序的多樹結構存儲
如果這是唯一的用途,並且它們僅在內部使用,則用戶代碼永遠不會出現Node
,並且您的代碼不會將它們存儲在dicts或set中,也不會調用任何起作用的函數,也許您可以逃脫而不覆蓋__hash__
。
但是這些限制非常嚴格,無法真正執行。 並且不重寫__hash__
與__eq__
一致也沒有好處。 因此,您仍然應該這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.