Bonjour

Je travaille actuellement sur un programme Python utilisant des décorateurs.
L'un de ces décorateurs me permet d'effectuer un "try" sur une méthode, afin d'agir en cas d'erreur (générée par mes soins) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
def dec_erreur(fonction_erreur):
    def decorateur(fonction_in):
        def fonction_out(*args, **kwargs):
            try:
                # Essai la fonction en entrée
                result = fonction_in(*args, **kwargs)
            except AbortError:
                # Appelle la fonction agissant en cas d'erreur
                return fonction_erreur()
            else:
                # Envoi du résultat de la fonction initiale
                return result
        return fonction_out
    return decorateur
Ce décorateur est placé avant la méthode d'une classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
class MaClasse:
    @dec_erreur(fonction_erreur)
    def maMethode(self):
        ...
Le faite de créer ce décorateur me permet de réduire le code au maximum. Je n'ai qu'à spécifier la fonction à effectuer en cas d'erreur, ce qui peut me permettre d'effectuer certaines choses en cas de plantage.

Placer une fonction sans argument en paramètre du décorateur n'est pas compliqué. Mais j'aimerais pouvoir appeler une méthode en cas d'erreur, ce qui me permettrait d'accéder à toutes mes variables utiles (connexions à des DB, objets...).

Comment pouvoir envoyer en paramètre du décorateur une référence à la méthode d'une classe?

Merci