Il costrutto property () restituisce l'attributo property.
La sintassi di property()
è:
proprietà (fget = None, fset = None, fdel = None, doc = None)
Letture consigliate: Python @property: come usarlo e perché?
proprietà () Parametri
La property()
prende quattro parametri opzionali:
- fget (opzionale) - Funzione per ottenere il valore dell'attributo. Il valore predefinito è
None
. - fset (opzionale) - Funzione per impostare il valore dell'attributo. Il valore predefinito è
None
. - fdel (opzionale) - Funzione per eliminare il valore dell'attributo. Il valore predefinito è
None
. - doc (opzionale) - Una stringa che contiene la documentazione (docstring) per l'attributo. Il valore predefinito è
None
.
Valore restituito dalla proprietà ()
property()
restituisce l'attributo della proprietà dal dato getter, setter e deleter.
- Se non vengono forniti argomenti,
property()
restituisce un attributo di proprietà di base che non contiene alcun getter, setter o deleter. - Se doc non viene fornito,
property()
accetta la docstring della funzione getter.
Esempio 1: creare un attributo con getter, setter e deleter
class Person: def __init__(self, name): self._name = name def get_name(self): print('Getting name') return self._name def set_name(self, value): print('Setting name to ' + value) self._name = value def del_name(self): print('Deleting name') del self._name # Set property to use get_name, set_name # and del_name methods name = property(get_name, set_name, del_name, 'Name property') p = Person('Adam') print(p.name) p.name = 'John' del p.name
Produzione
Recupero del nome Il nome è: Adam Impostazione del nome su John Eliminazione del nome
Qui, _name viene utilizzato come variabile privata per memorizzare il nome di Persona.
Abbiamo anche impostato:
- un metodo getter
get_name()
per ottenere il nome della persona, - un metodo setter
set_name()
per impostare il nome della persona, - un metodo deleter
del_name()
per eliminare il nome della persona.
Ora, impostiamo un nuovo nome di attributo di proprietà chiamando il property()
metodo.
Come mostrato nel programma, referenziare p.name
internamente chiama get_name()
getter, set_name()
setter e del_name()
deleter attraverso l'output stampato presente all'interno dei metodi.
Esempio 2: utilizzo di @property decorator
Invece di usare property()
, puoi usare il decoratore Python @property
per assegnare getter, setter e deleter.
class Person: def __init__(self, name): self._name = name @property def name(self): print('Getting name') return self._name @name.setter def name(self, value): print('Setting name to ' + value) self._name = value @name.deleter def name(self): print('Deleting name') del self._name p = Person('Adam') print('The name is:', p.name) p.name = 'John' del p.name
Produzione
Recupero del nome Il nome è: Adam Impostazione del nome su John Eliminazione del nome
Qui, invece di usare property()
, abbiamo usato il @property
decoratore.
Innanzitutto, specifichiamo che il name()
metodo è anche un attributo di Person. Questo viene fatto usando @property
prima il metodo getter come mostrato nel programma.
Successivamente, usiamo il nome dell'attributo per specificare il setter e il deleter.
Questo viene fatto usando @name.setter
per il metodo setter e @name.deleter
per il metodo deleter.
Si noti che abbiamo utilizzato lo stesso metodo name()
con definizioni diverse per definire getter, setter e deleter.
Ora, ogni volta che lo usiamo p.name
, chiama internamente il getter, il setter e il deleter appropriati come mostrato dall'output stampato presente all'interno del metodo.