Python proprietà ()

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.

Articoli interessanti...