lettura facile

Il metodo __setitem__() in Python

Il metodo '__setitem__()' in Python è un metodo speciale che viene chiamato quando usiamo la sintassi delle parentesi quadre per assegnare un valore a un elemento di una struttura dati, come in un dizionario o una lista.

oggetto.__setitem__()

Facciamo un esempio pratico

Quando in un dizionario scrivi qualcosa come

mio_dizionario['chiave'] = 'valore'

Quello che accade dietro le quinte è che Python chiama automaticamente il metodo '__setitem__()' sull'oggetto 'mio_dizionario', passando 'chiave' come primo argomento (la chiave) e 'valore' come secondo argomento (il valore da associare alla chiave).

In generale,  il metodo '__setitem__()' è implementato in classi come 'dict' (dizionari), 'list' (liste), e in tutte quelle strutture dati che supportano l'accesso e la modifica di elementi tramite una chiave o un indice.

Puoi anche implementarlo in una classe per permettere agli oggetti di comportarsi in modo simile a tipi di dati integrati.

Ad esempio, se crei una classe che deve comportarsi come un dizionario, puoi definire il metodo '__setitem__()' per gestire l'assegnazione di valori alle chiavi.

Un esempio pratico

Immagina di voler creare una classe chiamata 'Rubrica', che memorizza numeri di telefono associati ai nomi delle persone come faresti con un dizionario

In questa struttura di dati devi poter aggiungere i numeri di telefono e i nomi degli utenti usando la sintassi delle parentesi quadre

Ecco come puoi farlo. 

class Rubrica:
    def __init__(self):
        self.contatti = {}

    def __setitem__(self, nome, numero):
        self.contatti[nome] = numero
        print(f'Aggiunto {nome} con numero {numero}')

    def __getitem__(self, nome):
        return self.contatti.get(nome, 'Contatto non trovato')

Nella classe Rubrica abbiamo definito due metodi:

  • Il metodo __setitem__() riceve come argomenti il nome della persona e il numero di telefono.
  • Il meotdo __getitem__() recupera i numeri di telefono usando la sintassi delle parentesi quadre.

Crea un'istanza di questa classe.

rubrica = Rubrica()

Poi assegna dei valori all'oggetto.

rubrica['Alice'] = '123-4567' 

Aggiunto Alice con numero 123-4567

Quando scrivi `rubrica['Alice'] = '123-4567'`, Python chiama il metodo `__setitem__()` della classe `Rubrica`, con 'Alice' e '123-4567' come argomenti.

Questo significa che potresti ottenere lo stesso risultato anche scrivendo il comando:

rubrica.__setitem__('Alice', '123-4567')

In entrambi i casi viene registrata la chiave e il valore.

Ora assegna un'altra coppia di chiave-valore nell'oggetto 'rubrica'.

rubrica['Bob'] = '987-6543'

Aggiunto Bob con numero 987-6543

A questo punto nella struttura ci sono due coppie.

Puoi richiamare le informazioni indicando la chiave tra le parentesi quadre

print(rubrica['Alice']) 

Questo comando chiama indirettamente il metodo rubrica.__getitem__('Alice') e visualizza il valore associato alla chiave 'Alice'.

123-4567

In conclusione, definire il metodo '__setitem__()' ti permette di personalizzare come la nostra classe gestisce l'assegnazione di valori.

Questo può essere molto utile se vuoi eseguire operazioni aggiuntive ogni volta che un valore viene aggiunto o modificato, come validare i dati, registrare l'operazione, o anche aggiornare una visualizzazione.

Spero che questo ti abbia chiarito le idee su come funziona questo metodo e perché è utile!




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin