Ich möchte verschiedene Funktionen nur ausführen, wenn der angemeldete Benutzer die erforderliche Berechtigungsstufe hat.Dekorator zum Festlegen von Attributen der Funktion
Um mein Leben komplexer zu machen, möchte ich einfach Dekorateure verwenden. Im Folgenden habe ich versucht, das Attribut permission
auf "dekorierte" Funktionen zu setzen - wie unten gezeigt.
def permission(permission_required):
def wrapper(func):
def inner(*args, **kwargs):
setattr(func, 'permission_required', permission_required)
return func(*args, **kwargs)
return inner
return wrapper
@permission('user')
def do_x(arg1, arg2):
...
@permission('admin')
def do_y(arg1, arg2):
...
Aber wenn ich tue:
fn = do_x
if logged_in_user.access_level == fn.permission_required:
...
Ich erhalte einen Fehler 'function' object has no attribute 'permission_required'
Was bin ich?
Als Randbemerkung: ich bin ziemlich sicher, dass Sie [ 'functools.wraps'] verwenden möchten (http://docs.python.org/2/library/functools.html#functools.wraps) Hier. Nicht um dein Problem direkt zu lösen, aber weil es so gut wie unmöglich ist, diese Art von Code zu debuggen, wenn jede Funktion mit dem Namen 'inner 'endet, wobei' (^ args, ** kwargs) ',' inspect' an die falsche Quelle geht, usw. – abarnert