Heim >Backend-Entwicklung >Python-Tutorial >Wie übergebe ich Instanzattribute an Klassenmethoden-Dekoratoren in Python?

Wie übergebe ich Instanzattribute an Klassenmethoden-Dekoratoren in Python?

Barbara Streisand
Barbara StreisandOriginal
2024-10-18 11:55:02872Durchsuche

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

Klassenmethoden mit Selbstargumenten dekorieren

In Python können Klassenmethoden dekoriert werden, um zusätzliche Verhaltensweisen hinzuzufügen oder ihre Argumente zu validieren. Die Übergabe des Instanzattributs als Argument an den Dekorator kann jedoch eine Herausforderung sein.

Um dieses Problem zu beheben, besteht eine Lösung darin, den Attributwert zur Laufzeit dynamisch innerhalb des Dekorators abzurufen. So können Sie dies erreichen:

<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>

In diesem Beispiel fängt der check_authorization-Dekorator die Methodenargumente ab und ruft das URL-Attribut der Instanz aus dem ersten Argument (das die Instanz selbst ist) ab. Anschließend können Sie den Wert des Attributs im Dekorator verwenden, um alle erforderlichen Autorisierungsprüfungen durchzuführen.

Für mehr Flexibilität können Sie den Dekorator so ändern, dass er den Attributnamen als Parameter akzeptiert:

<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>

Dadurch können Sie den Attributnamen angeben, der zur Laufzeit überprüft werden soll, wodurch Sie mehr Kontrolle über den Dekorationsprozess haben.

Das obige ist der detaillierte Inhalt vonWie übergebe ich Instanzattribute an Klassenmethoden-Dekoratoren in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn