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

Barbara Streisand
Libérer: 2024-10-18 11:55:02
original
790 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!