J'ai une fonction F qui fait des tas de trucs et avec plein de return (= plusieurs points de sortie).
Ce que j'aimerais obtenir :
une pre-routine qui s'exécute en entrée de ma fonction F et une post-routine qui s'exécute au automatiquement moment ou je sors de F (par n'importe lequel des return).
Avec bien sûr des variables partagées entre ces 2 routines.
La solution que j'ai trouvée :
Je déclare une classe C avec ma pre-routine dans le __init__ et ma post-routine dans le __del__.
--> au début de F je déclare une instance k de C et le tour est joué : l'instance est détruite automatiquement au moment où je sors de la fonction et ma post-routine est bien exécutée au bon moment sans avoir à l'appeler explicitement.
Ce qui ne va pas avec ma solution :
1 - j'ai un warning parce k n'est utilisée nulle part dans le corps de F (c'est ce qui me gène le plus) .
2 - je ne suis pas sûr que le garbage collector (ou équivalent) ne détruise pas k avant la sortie de F. (en fait, ça me gène encore plus)
3 - ma solution ressemble furieusement à ce qu'on fait en pareil cas en C++ avec la pre-routine dans le constructeur et la post-routine dans le destructeur d'une classe dédiée (bé oui, c'est mon autre langage préféré...).
Si quelqu'un connait une solution plus "pythonesque" pour obtenir le même résultat, je suis preneur.
Je pense qu'il y a quelque chose avec les décorateurs mais je n'ai pas encore trouvé...
Merci d'avance.
Partager