這是關於蟒2.x的爲什麼這個python類實例可散列?
在下面的類,如果我們子類「對象」,我明白所述方法繼承在派生類Foo包括__hash__
(可通過印刷看到這DIR(富())
因此調用哈希(富())調用魔術方法__hash__
,使我們的哈希值。
但是,如果我們不繼承「對象「,導致dir(Foo())未列出__hash__
方法,那麼爲什麼我們仍然在python2中獲得散列值?
在相信python3因爲從「對象*」類中的方法在默認情況下繼承了這一問題已得到解決。
#class Foo(object) Works since __hash__ is available in the base class
class Foo: #Why does this work?
def __init__(self):
self.x = None
a = Foo()
print dir(a) # No __hash__ magic method
print hash(a)
# Expecting an error like non-hashable or __hash__ not implemented
# or something similar
提示:'id(a)'仍然有效。相關:https://stackoverflow.com/questions/17192418/hash-function-in-python –