Sobes.tech
Junior — Middle

Quali passaggi sono necessari affinché un'istanza di una propria classe possa essere utilizzata come chiave in un dizionario Python?

sobes.tech AI

Risposta dell'AI

Per consentire a un'istanza di una propria classe di essere usata come chiave in un dizionario Python, deve essere hashabile e confrontabile. A tal fine, è necessario implementare i metodi __hash__() e __eq__() nella classe. Il metodo __hash__ deve restituire un valore intero unico per l'oggetto, considerando i suoi attributi significativi, e __eq__ deve definire l'uguaglianza tra gli oggetti.

Esempio:

class MyKey:
    def __init__(self, id):
        self.id = id

    def __hash__(self):
        return hash(self.id)

    def __eq__(self, other):
        return isinstance(other, MyKey) and self.id == other.id

# Utilizzo
my_dict = {}
key1 = MyKey(1)
key2 = MyKey(1)
my_dict[key1] = 'valore'
print(my_dict[key2])  # Mostrerà 'valore', poiché key1 == key2

È importante che gli oggetti siano immutabili rispetto agli attributi usati nel calcolo dell'hash, altrimenti il dizionario potrebbe funzionare in modo errato.