Salut à tous,

Je me suis intéressé aux types des paramètres des fonctions en python, cette discussion m'a été utile, surtout dans l'idée d'utiliser un décorateur pour vérifier les types passés automatiquement.

Que j'ai donc créé à ma sauce :

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
16
17
18
19
20
21
22
23
24
# Décorateur vérifiant les types des paramètres reçus d'une fonction
# En fonction des types déclarés dans sa définition
def cfa(fn) :
    def icfa(*args, **dargs) :
        an = fn.__code__.co_varnames
        if args :
            dargs = {}
            for k, v in enumerate(args) :
                dargs[an[k]] = v
        # Vérif des types
        for k, v in dargs.items() :
            if type(v) != fn.__annotations__[k] :
                raise TypeError('Le type du paramètre "' + str(k) + '" doit être de type ' + fn.__annotations__[k].__name__ + ', fourni : ' + str(type(v).__name__))
        return(fn(**dargs))
    return icfa
 
@cfa
def tfd(nom:str, age:int, ville:str) -> None :
    print('coucou {0} tu as {1} ans et tu habites dans la ville de {2}.'.format(nom, age, ville))
 
 
tfd('toto', 12, 'Dijon')
tfd(**{'nom':'belle', 'age':15, 'ville':'Perpignan'})
tfd(12, 19, True)
Le truc, c'est qu'il faut chaque fois faire précéder chaque fonction créée de @cfa, ma question, est donc :
Y'a t-il moyen d'appliquer ce décorateur à toutes les fonctions non built-in ou d'un autre module quelconque, donc seulement celles créées par l'utilisateur automatiquement ?