PYTHON DECORATOR

Salut  , c’est encore moi 😉

Un truc très puissant sous python dont je me suis  demandé  pendant très longtemps (Mais à quoi sert ce truc?)  est le (decorator).

Les (decorators) sous python sont comme des enveloppes de fonctions .Ils permettent de faire des contrôles sur les fonctions en court-circuitant leur  exécution .

Les cas d’utilisations peuvent  être multiples .

1. contrôle sur les arguments passés à une fonction

2.contrôle des droits d’exécution sur des fonctions.

d’ailleurs DJANGO lui même l’utilise  très souvent dans son implémentation .

Vous avec sans doute vu à maintes reprises sous DJANGO la structure  suivante:

Celle ci permet de vérifier si l’utilisateur qui tente d ‘ exécuter la fonction est bien authentifié .

————————-
@login_required
def view():
pass
————————-
L’exemple ci-dessous permet d’effectuer un contrôle sur les arguments passés à la fonction .
Si « Alioune » ne figure pas parmi les arguments , la fonction ne sera jamais exécutée .

——————————————-

def check_args (func):
    """ Viens que je te mate avant que tu t'executes """
    def wrapper(self , *args , **kwargs):
        if  "Alioune"  not in args:
            raise Exception (
                "arguements :%s " %args)
        else:
            func (self, *args , **kwargs)

    return wrapper
class KeyWorder:
    """ Basic Keyworder class """
    # la fonction _check_args verifie si _alioune_ est dans la
    # liste des arguments avant de permettre l'execution de la fonction
    @check_args
    def handle_args(self , *args , **kwargs):
        """ Une fonction qui traite quelque chose """
        print  (
            "Ah <check_args>  m'a laissé passé , bon je continue alors")
        print  ("args  : %s  " %
               ''.join(args))
        print  ("kargs  : %s " %
               ''.join([ "%s :%s " %(k ,v)
                        for (k,v ) in  kwargs.items() ]))

if __name__ =="__main__":
    args   =[ "Alioune" ,"Jean" ]
    kwargs ={ "rien" : "rien du tout" }
    kwd   = KeyWorder ()
    kwd.handle_args (*args)

——————————————-

Publicités

0 Responses to “PYTHON DECORATOR”



  1. Laisser un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s





%d blogueurs aiment cette page :