2011-09-04 86 views
2

我有一個名爲WeakBoundMethod(codereview.se上的source)的類。我想要一些關於如何實施__hash__()的指南。另外,Python 3自動提供了一個__repr__()函數,所以我想我不應該再重新定義它(?)。我怎麼樣__str__(),我知道這是對象的人類可讀文本表示;我是否應該定義它?任何指引?我應該如何實現__hash__和__str__

關於散列函數...
我想它基於的__self__和綁定的方法是包裝的__func__的哈希值。我怎樣才能做到這一點?

+0

除非您打算製作WeakBoundMethods哈希鍵,否則不需要實現'__hash__'。如果你這樣做,他們應該是不可變的,你也必須實現'__eq__'。 – delnan

+0

@delnan這不僅僅是一個學習項目,所以在實施它們時沒有任何傷害。 :) –

回答

2

如果有疑問,請勿實施神奇方法。默認值是有原因的,會很好。在你的情況下,實現__hash__是完全沒有必要的(如果你要實現它,你必須實現__eq__),除非你期望有人擁有一套方法或字典的方法。

__str__可能有用。在你的情況,其結果應包括:

  • 類名,以避免混淆與別的
  • 無論功能是活還是不
  • 如果它是活的,它str()結果識別功能按名稱
+0

這不是一個真正的項目。我正在學習如何使用Python,我也想學習如何編寫哈希函數。 :) –

+1

@Paul嗯,這個類不應該有'__hash__'函數。通常,實現它的最好方法是對類的某種表示進行散列,例如'hash((self.a,self.b))' – phihag

相關問題