Dekorator, um Attribute der Funktion zu setzen

8

Ich möchte, dass verschiedene Funktionen nur ausführbar sind, wenn der angemeldete Benutzer die erforderliche Berechtigungsstufe hat.

Um mein Leben komplexer zu machen, möchte ich Dekorateure verwenden. Im Folgenden habe ich versucht, das Attribut permission auf 'dekorierte' Funktionen zu setzen - wie unten gezeigt.

%Vor%

Aber wenn ich das tue:

%Vor%

Ich erhalte einen Fehler 'function' object has no attribute 'permission_required'

Was vermisse ich?

    
rikAtee 03.04.2013, 17:48
quelle

2 Antworten

14

Sie setzen das Attribut in der inneren (Wrapper) -Funktion. Sie benötigen keine Wrapper-Funktion überhaupt :

%Vor%

Ihr Dekorator muss etwas zurückgeben, das die ursprüngliche Funktion ersetzt. Die ursprüngliche Funktion selbst (mit dem hinzugefügten Attribut) ist dafür geeignet, weil Sie nur ein Attribut hinzufügen wollten.

Wenn Sie noch einen Wrapper benötigen, setzen Sie das Attribut stattdessen auf die Wrapper-Funktion :

%Vor%

Immerhin ersetzen Sie die umbrochene Funktion durch den vom Decorator zurückgegebenen Wrapper, also das Objekt, nach dem Sie suchen, um das Attribut zu aktivieren.

    
Martijn Pieters 03.04.2013, 17:51
quelle
1

Ihr Dekorator sollte eine Funktion zurückgeben, die do_x oder do_y ersetzen kann, nicht das Ausführungsergebnis von do_x oder do_y . Sie können Modalität wie folgt dekorieren:

%Vor%

Natürlich haben Sie eine andere kurze Lösung:

%Vor%     
Yarkee 03.04.2013 18:02
quelle