Heim >Backend-Entwicklung >Python-Tutorial >Wie übergebe ich Instanzattribute an Klassenmethoden-Dekoratoren 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!