簡體   English   中英

如何檢查類是否實現了自定義 __hash__

[英]How to check if class has custom __hash__ implemented

我需要一種方法來獲取在運行中保持一致的對象的哈希值。

目前,我正在使用以下方法:

  1. 使用pickle.dumps()將對象轉換為字節
  2. 使用hashlib中的函數之一計算哈希

這適用於大多數對象,但pickle.dumps可能很慢。 對於這種情況,我可以為所需的類定義自定義__hash__函數。

有沒有辦法讓我檢測類何時定義了自定義__hash__函數,以便我可以改用它?

您可以使用每個類的__dict__屬性。 如果它沒有在類本身中實現,它就不會有__hash__ 繼承也能正常工作。

class A:
    def __hash__(self) -> int:
        return 'your code here ...'


class B(A):
    pass

在這段代碼中B.__dict__.get('__hash__')返回None

如果我理解正確,可以使用inspect.ismethoddescriptor進行檢查,因為默認方法是 C 方法的包裝描述符,因此如果在類上定義了該方法,則將__hash__函數傳遞給它會是False

import inspect

class C:
  def __hash__(self):
    pass

class B:
  pass


print(inspect.ismethoddescriptor(C.__hash__))   # -> False
print(inspect.ismethoddescriptor(B.__hash__))   # -> True
print(inspect.ismethoddescriptor(int.__hash__)) # -> True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM