python中装饰器,装饰的基本原理包括,python 装饰器原理

  python中装饰器,装饰的基本原理包括,python 装饰器原理

  我们在定义装饰器时,会在用@wraps装饰的函数中保持自己的私有属性

  def decorator(f):@ wraps(f)f)def decorated)args,**kwargs(:print)ok’)returnf)args,* * kwargs

  wrapper _ assignments=( _ _ module _ , __name__ , __qualname__ , __doc__ ),以wrapperfunction returnsadecoratorthatinvokesupdate _ wrapper nts。defaultargumentsareasforupdate _ wrapper(.thisisaconveniencefunctiontosimplify应用部分o update _ wrapper(.wrapped=wrapped,assigned=assigned,updated=updated wrapped=wrapped assigned=assigned,updated=updated),其中parad partial(update_wrapper,wrapped=updated=updated(3http://www .Sina.com/)和更新_包装3358www .Sina.com/

  defupdate_wrapper(wrapper,wrapped,assigned=WRAPPER_ASSIGNMENTS,updated=WRAPPER _ UPDATES)3360 updateawwrapperfunctiontolooklikethewrappedfunctionwrapperistfunctionasigng signeddirectlyfromthewrappedfunctiontowrapperfunction(defaultstofunctiontools。WRAPPER _ a sign mment updatedisatulenameget date with the wrappedfunction(ols)的相应属性。WRAPPER _ UPDATES( for attributen assigned 3360 try 360值update)getattr)wrap at { })# issue # 174823360 update _ ting时从wrappedfunction设置_ _ wrapped _ _ lastsowedon tinadvertentlycopyit #

  update_wrapper(wrapper,f,assigned=((__module_),(__name__),)_qualname_),)_。

  def decorator(f):@ update _ wrapper,f,assigned=((__module__),(__name__),)_。udated=_dict__ ,)def defined(args,**kwargs):print)ok)returnf)args,* * kwargs

  def decorator(f):update _ wrapper)decorated,f,assigned=((__module__),(__name__),)_。更新=(__dict__ ,) (请参阅上面的更新_包装实现,可以看到将f的属性绑定到装饰过的。这是因为在使用装饰器时:

  @ decoratordeflogin(:返回 hello 是

  可以看到登录=装饰者(登录)=装饰装饰器修饰的函数注册为函数装饰过的。如上所示,您可以看到@wraps的存在将函数登录)的属性绑定到了装饰

  如果在定义装饰器时不使用@wraps

  # fromfunctoolsimportwrappsdefdecorator(f):# @ wrapps(f)f)def decorated)args 、* * kwargs):print(" ok ")))* kwargs(return decorated @ decoratordeftest)):return ok pref test)

  function

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: