17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

106<br />

Éléments du langage<br />

DEUXIÈME PARTIE<br />

Decorators<br />

Toutes les fonctions fournies dans Python sont dotées d’un docstring, ce qui est pratique<br />

pour une documentation en ligne directe. On y renseigne sur l’objectif de la<br />

fonction et sur le détail de ses paramètres.<br />

Détails sur divmod par son docstring<br />

>>> print(divmod.__doc__)<br />

divmod(x, y) -> (div, mod)<br />

Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.<br />

À RETENIR Importance des docstrings<br />

Les docstrings jouent un rôle relativement important en Python. Le chapitre 7 décrit précisément les conventions<br />

de nommage des docstrings et le chapitre 12 leur utilisation dans le cadre des tests unitaires.<br />

Les decorators sont issus d’un besoin de généralisation des mécanismes introduits par<br />

les fonctions classmethod() et staticmethod() apparus à la version 2.2 de Python.<br />

En l’occurrence, pour spécifier qu’une fonction est une méthode statique ou une méthode<br />

de classe (voir les decorators pour les classes à la prochaine section), il est nécessaire de<br />

procéder à un appel à l’une des primitives en passant en paramètre la fonction.<br />

D’un point de vue plus général aux fonctions, le principe, calqué sur le modèle existant<br />

en Java (annotations), est d’effectuer un prétraitement au moment de l’appel<br />

d’une fonction.<br />

Définition d’un prétraitement<br />

>>> def decorate(function):<br />

... function.__doc__ = 'Fonction décorée %s' % function.__doc__<br />

... return fonction<br />

...<br />

>>> def a_function():<br />

... """Ma fonction."""<br />

... print('traitement')<br />

...<br />

>>> a_function = decorate(a_function)<br />

>>> print(a_function.__doc__)<br />

Fonction décorée Ma fonction.<br />

La fonction decorate décore la fonction a_function de détails supplémentaires et la<br />

liaison se fait par function=decorate(function).

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

Saved successfully!

Ooh no, something went wrong!