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

    esempio

    print(oggetto.attributo)

  • fset è il metodo della classe da richiamare quando si assegna un valore all'attributo

    esempio

    oggetto.attributo=valore

  • fdel è il metodo della classe da richiamare quando si vuole cancellare l'attributo

    esempio

    del 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 )

    1. class Prova:
    2. def __init__(self, name):
    3. self._name = name
    4. def metodo1(self):
    5. print('Visualizza')
    6. return self._name
    7. def metodo2(self, value):
    8. print('Assegna il valore ' + value)
    9. self._name = value
    10. def metodo3(self):
    11. print('Cancella l\'attributo')
    12. del self._name
    13. 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.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Classi Python