新闻动态

Python装饰器的两种使用心得

发布日期:2021-12-29 02:21 | 文章来源:源码中国

装饰器的基础使用(装饰带参函数)

def decorator(func):
 def inner(info):
  print('inner')
  func(info)
 return inner
@decorator
def show_info(info):
 print(info)
show_info('hello')

防止装饰器改变装饰函数名称

装饰器在装饰函数的时候由于返回的是inner的函数地址,所以函数的名称也会改变 show_info.__name__会变成inner,防止这种现象可以使用functools

import functools
def decorator(func):
	@functools.wraps(func)
 def inner(info):
  print('inner')
  func(info)
 return inner
@decorator
def show_info(info):
 print(info)
show_info('hello')

这样写就不会改变被装饰函数的名称

装饰器动态注册函数

此方法在Flask框架的app.Route()的源码中体现

class Commands(object):
 def __init__(self):
  self.cmd = {}
 def regist_cmd(self, name: str) -> None:
  def decorator(func):
self.cmd[name] = func
print('func:',func)
return func
  return decorator
commands = Commands()
# 使得s1的值指向show_h的函数地址
@commands.regist_cmd('s1')
def show_h():
 print('show_h')
# 使得s2的值指向show_e的函数地址
@commands.regist_cmd('s2')
def show_e():
 print('show_e')
func = commands.cmd['s1']
func()

个人心得

在阅读装饰器代码时可以使用加(func_name)的方式
以为例

@commands.regist_cmd('s2')
def show_e():
 print('show_e')

即 show_e = commands.regist_cmd('s2')(show_e)

到此这篇关于Python装饰器的两种使用的文章就介绍到这了,更多相关Python装饰器使用内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部