La funzione property di Python
Nel linguaggio Python la funzione property è un metodo costruttore usato in una classe per definire la proprietà di un oggetto.
La sintassi
property(fget=None, fset=None, fdel=None, doc=None)
Ogni argomento è associato a un metodo della classe.
A seconda della funzione svolta, property richiama un metodo oppure un altro.
- fget è il metodo della classe da richiamare quando viene letto l'attributo
esempioprint(oggetto.attributo)
- fset è il metodo della classe da richiamare quando si assegna un valore all'attributo
esempiooggetto.attributo=valore
- fdel è il metodo della classe da richiamare quando si vuole cancellare l'attributo
esempiodel oggetto.attributo
- doc è la stringa della documentazione della proprietà
Tutti i parametri della funzione sono opzionali e facoltativi.
Quindi, a seconda dei casi posso usarne uno, due, tre o tutti.
Attenzione. Se uno dei parametri non è documentato, l'interprete restituisce un errore nel caso in cui si richiama il metodo associato. Ad esempio, se non documento il parametro getname, poi non posso richiamare il metodo con una print(oggetto.attributo) perché andrebbe in errore.
Per usare la funzione property posso specificare espressamente il nome di ciascun parametro
Esempio
name = property( fget=metodo1, fset=metodo2, fdel=metodo3, doc='documentazione')
oppure non specificarlo rispettando l'ordine dei parametri.
Esempio
name = property( metodo1, metodo2, metodo3, 'documentazione')
Un esempio pratico
Creo una classe chiamandola Prova
All'interno della classe definisco tre metodi ( metodo1, metodo2, metodo3 )
- class Prova:
- def __init__(self, name):
- self._name = name
- def metodo1(self):
- print('Visualizza')
- return self._name
- def metodo2(self, value):
- print('Assegna il valore ' + value)
- self._name = value
- def metodo3(self):
- print('Cancella l\'attributo')
- del self._name
- attributo = property( fget=metodo1, fset=metodo2, fdel=metodo3, doc='documentazione')
All'ultima riga della classe creo un attributo tramite la funzione property().
Assegno il parametro fget al metodo1, fset al metodo2 e fdel al metodo3 della classe.
Come funziona la funzione property?
Per spiegare il funzionamento associo un oggetto alla classe prova
oggetto = Prova('Andrea')
L'oggetto eredita tutte le proprietà della classe e anche l'attributo.
Quando leggo l'attributo dell'oggetto, la funzione property richiama automaticamente il metodo 1 della classe tramite il parametro fget
>>> print(oggetto.attributo)
>>> Visualizza
Quando assegno all'attributo un nuovo valore, la funzione property richiama il metodo 2 tramite il parametro fset
>>> oggetto.attributo='Gaia'
>>> Assegna il valore Gaia
Quando cancello l'attributo, la funzione property richiama il metodo 3 tramite il parametro fdel
>>> del oggetto.attributo
>>> Cancella l'attributo
In conclusione, la funzione property richiama un metodo diverso della classe a seconda di come utilizzo l'attributo.
Ecco spiegato il funzionamento della funzione property nelle classi di python.
E così via.