Diciamo che ho un dizionario:Perché non posso chiamare hash() su un metodo apparentemente lavabile di un'istanza non cancellabile?
>>> d = {}
Ha un metodo di clear()
:
>>> d.clear
<built-in method clear of dict object at 0x7f209051c988>
... che ha un attributo __hash__
:
>>> d.clear.__hash__
<method-wrapper '__hash__' of builtin_function_or_method object at 0x7f2090456288>
... che è callable:
>>> callable(d.clear.__hash__)
True
Quindi perché non posso farlo?
>>> hash(d.clear)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
Nota: so che dict
oggetti sono nel calcolo dell'hash - Sono curioso di sapere perché questa restrizione si estende ai loro metodi, anche se, come notato sopra, sembrano sostenere il contrario?