【发布时间】:2013-03-25 12:52:25
【问题描述】:
我希望仅当登录用户具有所需的权限级别时才能执行不同的功能。
为了让我的生活更简单,我想使用装饰器。下面我尝试在 'decorated' 函数上设置属性 permission - 如下所示。
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):
...
但是当我这样做时:
fn = do_x
if logged_in_user.access_level == fn.permission_required:
...
我收到一个错误'function' object has no attribute 'permission_required'
我错过了什么?
【问题讨论】:
-
附带说明:我很确定你想在这里使用
functools.wraps。不是直接解决您的问题,而是因为当每个函数最终命名为inner、将(*args, **kwargs)、inspect输入错误的源等时,调试这种代码几乎是不可能的。
标签: python attributes decorator python-decorators function-attributes