Votre navigateur n'est pas à jour !

Merci de mettre à jour votre navigateur pour utiliser mon blog. Mettre à jour mon navigateur maintenant

×

Python -Utiliser les getters et setters en python

Date de publication 13 sept. 2022
Contrairement à d'autres langages, l'utilisation d'un getter ou setter en python est peu trouvé, car il est jugé non pythonique. Nous allons voir ce que préconise python pour mettre en place cet accès au propriété d'un objet

@property

Un décorateur @property contenu dans la librairie standard est à poser au-dessus de la méthode qui implémente la récupération de la propriété : cela permet de définir le getter.
Le setter sera un décorateur à apposer au-dessus de la méthode mettant à jour la propriété. Le nom du décorateur varie en fonction du nom de la méthode du getter. Ici on retrouvera birth_date après l'arobase pour le setter car c'est le nom de la méthode getter. On suivra ce nom par un point et le mot setter
Vous avez vu que l'accès à la propriété year ne contient pas de parenthèse (alors que l'on a défini une méthode), c'est le décorateur qui fait le lien automatiquement.
De cette manière nous protégeons également la propriété privée
__birth_date
d'un accès public.

Pour rappel, une propriété privée porte un double underscore devant son nom mais il s'agit bien d'une convention.
Ainsi on peut assez facilement accéder à cette propriété depuis
__dict__


Vous allez me dire que l'on aurait très bien pu se passer de ces 2 méthodes et mettre en place la manipulation directe de l'attribut birth_date (cette fois sans le dunder).
Mais il peut être intéressant de passer par des méthodes lorsque l'on a besoin de faire des transformations. Ici nous allons calculer son âge à partir de sa date de naissance

Vous avez remarqué que le setter sur year ne fonctionne pas, car nous n'avons pas mis en place le décorateur @year.setter
De cette façon on se protège de la mise à jour de propriété

__setattr__


Cette méthode comprise dans la librairie standard permet d'être exécuté lorsque le code met à jour une propriété. A l'intérieur de cette méthode on peut définir nos règles

Ici on retrouve une classe plus légère mais moins lisible.
L'usage de setattr peut être intéressante quand vous avez besoin d'initialiser plusieurs propriétés
Dans l'exemple ci-dessus nous utilisons la méthode setattr() qui permet de modifier l'instance en cours pour lui ajouter les propriétés.
Toujours dans cet exemple on peut initialiser un grand nombre de propriétés rapidement (dans le __init__) tout en gardant le contrôle sur ce qui est ajouté dans cette instance (méthode __setattr__())

Conclusion

Dans la majorité des cas vous devrez mettre en place la solution avec le décorateur @property qui est préconisé par python pour faire des getter/setter
blog comments powered by Disqus