[英]How to check if class has custom __hash__ implemented
我需要一種方法來獲取在運行中保持一致的對象的哈希值。
目前,我正在使用以下方法:
pickle.dumps()
將對象轉換為字節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.