La construction property () renvoie l'attribut de propriété.
La syntaxe de property()
est:
property (fget = None, fset = None, fdel = None, doc = None)
Lecture recommandée: Python @property: comment l'utiliser et pourquoi?
property () Paramètres
Le property()
prend quatre paramètres facultatifs:
- fget (facultatif) - Fonction pour obtenir la valeur d'attribut. La valeur par défaut est
None
. - fset (facultatif) - Fonction de définition de la valeur d'attribut. La valeur par défaut est
None
. - fdel (facultatif) - Fonction de suppression de la valeur d'attribut. La valeur par défaut est
None
. - doc (facultatif) - Une chaîne qui contient la documentation (docstring) pour l'attribut. La valeur par défaut est
None
.
Valeur renvoyée par la propriété ()
property()
renvoie l'attribut de propriété à partir du getter, du setter et du deleter donnés.
- Si aucun argument n'est donné,
property()
renvoie un attribut de propriété de base qui ne contient aucun getter, setter ou deleter. - Si doc n'est pas fourni,
property()
prend la docstring de la fonction getter.
Exemple 1: créer un attribut avec getter, setter et 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
Production
Obtention du nom Le nom est: Adam Définition du nom sur John Suppression du nom
Ici, _name est utilisé comme variable privée pour stocker le nom de Person.
Nous définissons également:
- une méthode getter
get_name()
pour obtenir le nom de la personne, - une méthode de setter
set_name()
pour définir le nom de la personne, - une méthode
del_name()
de suppression pour supprimer le nom de la personne.
Maintenant, nous définissons un nouveau nom d'attribut de propriété en appelant la property()
méthode.
Comme indiqué dans le programme, référencer en p.name
interne les appels en get_name()
tant que getter, en set_name()
tant que setter et en del_name()
tant que deleter via la sortie imprimée présente dans les méthodes.
Exemple 2: Utilisation du décorateur @property
Au lieu d'utiliser property()
, vous pouvez utiliser le décorateur Python @property
pour affecter le getter, le setter et le 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
Production
Obtention du nom Le nom est: Adam Définition du nom sur John Suppression du nom
Ici, au lieu d'utiliser property()
, nous avons utilisé le @property
décorateur.
Tout d'abord, nous spécifions que la name()
méthode est également un attribut de Person. Cela se fait en utilisant @property
avant la méthode getter comme indiqué dans le programme.
Ensuite, nous utilisons le nom d'attribut pour spécifier le setter et le deleter.
Cela se fait en utilisant @name.setter
pour la méthode setter et @name.deleter
pour la méthode deleter.
Remarquez, nous avons utilisé la même méthode name()
avec des définitions différentes pour définir le getter, le setter et le deleter.
Maintenant, chaque fois que nous l'utilisons p.name
, il appelle en interne le getter, le setter et le deleter appropriés, comme indiqué par la sortie imprimée présente dans la méthode.