[PYTHON] Faire un décorateur de fonction

Je souhaite créer et réutiliser un décorateur (avec étiquette) qui effectue un pré / post-traitement de la fonction comme indiqué ci-dessous.

>>> @MyDecorator('any-tag')
... def foo():
...     print u'foo'
... 
>>> foo():

pre-action. tag=any-tag.
foo
post-action. tag=any-tag.

Faites comme ça.

class MyDecorator(object):
    
    def __init__(self, tag):
        self._tag = tag
    
    def __call__(self, f0):
        def decorated(*args, **kwargs):
            print u'pre-action. tag=' + self._tag
            ret = f0(*args, **kwargs)
            print u'post-action. tag=' + self._tag
            return ret
        return decorated

Version utilisant functools.wraps.

Merci @termoshtt (^ ◇ ^)

from functools import wraps

def MyDecorator(tag):
    def dec(f0):
        @wraps(f0)
        def decorated(*args, **kwargs):
            print u'pre-action. tag=' + tag
            ret = f0(*args, **kwargs)
            print u'post-action. tag=' + tag
            return ret
        return decorated
    return dec

Recommended Posts

Faire un décorateur de fonction
Comment créer une fonction récursive
[Python] Faire de la fonction une fonction lambda
Décorateur de fonction Python
Créer un décorateur de fonction Python avec Class
Faisons un jeu de squash
Différencier une fonction à deux variables
Utilisez Property Decorator?
Faire une matrice de distance
Je vais créer un mot de passe!
Créer un bouton Nyan
Décorer avec un décorateur
Créez un jeu à la Tetris!
Créer un décodeur Base64
[Pratique] Créez une application Watson avec Python! # 2 [Fonction de traduction]
Créer une fonction pour décrire les polices japonaises avec OpenCV
[Python] Assurez-vous que la fonction reçue est une fonction définie par l'utilisateur
Créer un backend Blueqat ~ Partie 1
Créer une fonction en Python
Créer un backend Blueqat ~ Partie 2
Ecrire une fonction de densité du noyau
Comment appeler une fonction
[Django] Créer un menu déroulant
Créer un LINE BOT (chat)
Essayez de dessiner une fonction logistique
Créer un bookmarklet en Python
Faites une loterie avec Python
Faire de Responder un démon (service)
Exemple de fonctions d'ordre supérieur (décorateurs) en Python
Qu'est-ce qu'une fonction de rappel?
Créez facilement un profil avec un décorateur
Faire un feu avec kdeplot
Faire une impression de forage de calcul
Associez Python Enum à une fonction pour la rendre appelable
Faisons une rumba distante [Matériel]
[Python] Qu'est-ce qu'une fonction zip?
Comment faire une traduction japonais-anglais
Créer un identifiant Santa à partir d'une image du Père Noël
Décorateur 1
Créer une boîte à Tweet pour Pepper
Faisons une interface graphique avec python.
Faites un son avec le notebook Jupyter
Faisons un service de vente au comptant 2
Créer un outil de reconnaissance de visage à l'aide de TensorFlow
Une fonction qui renvoie un nom aléatoire
Faisons une rupture de bloc avec wxPython
Faisons un service de vente au comptant 1
Comment créer un robot - Avancé
Rendre la compilation C un peu plus facile
python / Créer un dict à partir d'une liste.
Créer un système de recommandation avec python
Décorateur 2
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
Python --Fonction d'appel dynamique à partir d'une chaîne
[Blender] Comment créer un plug-in Blender
Créer un framework de décorateur à usage général pour Python