17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Structuration du code<br />

CHAPITRE 5<br />

La classe descriptor doit gérer les demandes faites par toutes les instances de la<br />

classe utilisatrice :<br />

__get__(instance, classe) : est appelée avec en paramètre l’instance courante<br />

et la classe. Si l’appel est effectué sur la classe directement, instance est à None.<br />

__set__(instance, value) : permet d’affecter une valeur sur l’instance.<br />

__delete__(instance): supprime l’attribut de l’instance.<br />

Properties<br />

L’écriture des descriptors peut être relativement lourde lorsque l’objectif est d’encapsuler<br />

de la manière la plus basique une variable d’instance.<br />

La primitive property() fournit cette généralisation et évite d’avoir à créer une<br />

deuxième classe en charge de la gestion de l’attribut : elle associe directement à une<br />

variable donnée trois méthodes d’accès.<br />

property(fget=None, fset=None, fdel=None, doc=None) -> property attribute<br />

fget, fset et fdel correspondent à trois objets callable (fonctions, méthodes ou<br />

classes avec méthode __call__()).<br />

doc permet d’associer à la volée à la propriété un docstring, puisqu’il n’est pas possible<br />

de le faire par code.<br />

Implémentation de property<br />

>>> class Car(object):<br />

... def __init__(self):<br />

... self._immat = ''<br />

... def _setimmat(self, value):<br />

... self._immat = value<br />

... def _getimmat(self):<br />

... return self._immat<br />

... def _delimmat(self):<br />

... print('achète un meilleur tournevis')<br />

... immatriculation = property(_getimmat, _setimmat, _delimmat)<br />

...<br />

>>> car = Car()<br />

>>> car.immatriculation<br />

''<br />

>>> car.immatriculation = '3245 XX 21'<br />

>>> car.immatriculation<br />

'3245 XX 21'<br />

>>> del car.immatriculation<br />

achète un meilleur tournevis<br />

>>> voiture.immatriculation<br />

'3245 XX 21'<br />

131

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!