首页 > 代码库 > Python 中实现装饰器时使用 @functools.wraps 的理由
Python 中实现装饰器时使用 @functools.wraps 的理由
Python 中使用装饰器对在运行期对函数进行一些外部功能的扩展。但是在使用过程中,由于装饰器的加入导致解释器认为函数本身发生了改变,在某些情况下——比如测试时——会导致一些问题。Python 通过 functool.wraps
为我们解决了这个问题:在编写装饰器时,在实现前加入 @functools.wraps(func)
可以保证装饰器不会对被装饰函数造成影响。比如,在 Flask 中,我们要自己重写 login_required
装饰器,但不想影响被装饰器装饰的方法,则 login_required
装饰器本身可以写成下面的样子:
def login_required_(func): @wraps(func) def decorated_view(*args, **kwargs): if current_app.login_manager._login_disabled: return func(*args, **kwargs) elif not current_user.is_authenticated: # return current_app.login_manager.unauthorized() return redirect(url_for("login.loginPage", next=request.url)) return func(*args, **kwargs) return decorated_view
Python 中实现装饰器时使用 @functools.wraps 的理由
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。