Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
decorateurs_verifargs [2011/03/28 06:55] tyrtamos |
decorateurs_verifargs [2011/03/28 07:11] tyrtamos |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
===== Problématique ===== | ===== Problématique ===== | ||
- | Si on prend l' | + | Si on prend l' |
+ | |||
+ | * on puisse récupérer l' | ||
+ | |||
+ | * on puisse | ||
C'est le cas pour la vérification de conditions sur les arguments (ex: n>0) et sur leurs types (ex: type(n)=int). Le problème est que ces vérifications doivent être codées dans chacune des fonctions, ce qui prend du temps et de la place. D' | C'est le cas pour la vérification de conditions sur les arguments (ex: n>0) et sur leurs types (ex: type(n)=int). Le problème est que ces vérifications doivent être codées dans chacune des fonctions, ce qui prend du temps et de la place. D' | ||
- | L' | + | L' |
Les décorateurs sont des fonctions ou des classes qui permettent de modifier des fonctions ou des méthodes par des opérations faites avant et/ou après leur appel. | Les décorateurs sont des fonctions ou des classes qui permettent de modifier des fonctions ou des méthodes par des opérations faites avant et/ou après leur appel. | ||
Ligne 13: | Ligne 17: | ||
Voir la documentation Python, et, par exemple: [[http:// | Voir la documentation Python, et, par exemple: [[http:// | ||
- | ===== Utilisation | + | ===== Décorateur proposé |
- | On définit un décorateur qui s' | + | On définit un décorateur qui s' |
* pour les arguments par position: des chaines de caractères représentant des expressions booléennes qui doivent être vraies (ex: " | * pour les arguments par position: des chaines de caractères représentant des expressions booléennes qui doivent être vraies (ex: " | ||
Ligne 31: | Ligne 35: | ||
On voit bien ici les 2 types de vérification à faire: les conditions (" | On voit bien ici les 2 types de vérification à faire: les conditions (" | ||
- | On voit aussi qu'on n'est pas obligé de tout vérifier: ici, le type de la variable | + | On voit aussi qu'on n'est pas obligé de tout vérifier: ici, le type des variables |
+ | |||
+ | Quelques exemples d' | ||
<code python> | <code python> | ||
- | fonctiontest(6, | + | r = fonctiontest(6, |
- | # appel réussi: toutes les conditions et types sont ok | + | # appel réussi: toutes les conditions et tous les types sont ok |
+ | # à noter que le type de la valeur None est vérifié grâce à NoneType du module standard types | ||
- | fonctiontest(2, | + | r = fonctiontest(2, |
# échec: mauvais type pour b | # échec: mauvais type pour b | ||
# à noter que la vérification sur les types est faite avant l' | # à noter que la vérification sur les types est faite avant l' | ||
- | fonctiontest(2, | + | r = fonctiontest(2, |
# échec: condition a>=b non remplie | # échec: condition a>=b non remplie | ||
# à noter que les types des arguments par défaut non passés (ici e=123) ne sont pas testés | # à noter que les types des arguments par défaut non passés (ici e=123) ne sont pas testés | ||
- | fonctiontest(6, | + | r = fonctiontest(6, |
- | # échec: condition c>=0 non remplie | + | # échec: condition c>=0 non remplie |
</ | </ | ||
- | Ça marche aussi pour les méthodes des classes: | + | Ça marche aussi de la même façon |
<code python> | <code python> | ||
Ligne 60: | Ligne 67: | ||
x = Classetest() | x = Classetest() | ||
- | x.methodetest(2, | + | r = x.methodetest(2, |
# échec: condition a>=b non remplie | # échec: condition a>=b non remplie | ||
</ | </ | ||
Ligne 68: | Ligne 75: | ||
<code python> | <code python> | ||
try: | try: | ||
- | x.methodetest(5, | + | |
except (ValueError, | except (ValueError, | ||
print e | print e | ||
Ligne 78: | Ligne 85: | ||
<code python> | <code python> | ||
+ | #! / | ||
+ | # -*- coding: utf-8 -*- | ||
+ | # Python v2.7 | ||
+ | |||
from types import NoneType | from types import NoneType | ||