Maison >développement back-end >Tutoriel Python >Comment transmettre des attributs d'instance aux décorateurs de méthodes de classe en Python ?

Comment transmettre des attributs d'instance aux décorateurs de méthodes de classe en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-18 11:55:02917parcourir

How to Pass Instance Attributes to Class Method Decorators in Python?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn