Décorer les méthodes de classe avec des arguments personnels
En Python, les méthodes de classe peuvent être décorées pour ajouter des comportements supplémentaires ou valider leurs arguments. Cependant, transmettre l'attribut d'instance comme argument au décorateur peut s'avérer difficile.
Pour résoudre ce problème, une solution consiste à récupérer la valeur de l'attribut de manière dynamique au moment de l'exécution dans le décorateur. Voici comment y parvenir :
<code class="python">from functools import wraps def check_authorization(f): @wraps(f) def wrapper(*args): print(args[0].url) return f(*args) return wrapper class Client: def __init__(self, url): self.url = url @check_authorization def get(self): print('get') Client('http://www.google.com').get()</code>
Dans cet exemple, le décorateur check_authorization intercepte les arguments de la méthode et récupère l'attribut URL de l'instance à partir du premier argument (qui est l'instance elle-même). Vous pouvez ensuite utiliser la valeur de l'attribut dans le décorateur pour effectuer les vérifications d'autorisation nécessaires.
Pour une plus grande flexibilité, vous pouvez modifier le décorateur pour accepter le nom de l'attribut comme paramètre :
<code class="python">def check_authorization(attribute): def _check_authorization(f): @wraps(f) def wrapper(self, *args): print(getattr(self, attribute)) return f(self, *args) return wrapper return _check_authorization</code>
Cela vous permet de spécifier le nom de l'attribut à vérifier au moment de l'exécution, vous donnant ainsi plus de contrôle sur le processus de décoration.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!