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.nameinternamente 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 @propertyper 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 @propertydecoratore.
Innanzitutto, specifichiamo che il name()metodo è anche un attributo di Person. Questo viene fatto usando @propertyprima 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.setterper il metodo setter e @name.deleterper 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.








