您正在检查内部(包装)函数上的属性,但在原始(包装)函数上进行了设置。但是,您 根本 需要包装函数:
def permission(permission_required): def decorator(func): func.permission_required = permission_required return func return decorator
你的装饰需要返回 的东西 那将取代原有的功能。原始函数本身(添加了属性)可以很好地完成此任务,因为您要做的只是向其添加一个属性。
如果仍然需要包装器,则在 包装器函数 上设置属性:
from functools import wrapsdef permission(permission_required): def decorator(func): @wraps(func) def wrapper(*args, **kwargs): # only use a wrapper if you need extra pre to be run here return func(*args, **kwargs) wrapper.permission_required = permission_required return wrapper return decorator
毕竟,您要用装饰器返回的包装器替换包装的函数,因此这就是您要在其上查找属性的对象。
我还将
@functools.wraps()装饰器添加到包装器中,该装饰器将重要的标识信息和其他有用的东西复制
func到包装器中,从而使使用起来更加容易。



