Python怎么实现装饰器

口口导航网 文章阅读 276 0
边肖告诉你Python是如何实现装饰器的。相信大部分人还是不太了解他们。因此,我想分享这篇文章供你参考。希望你看完这篇文章后收获多多。让我们一起来看看。

普通装饰器:

,编码就行了。 defdemo(func_test): defwrapper(): 打印(“定义的第一个装饰器”) func_test() 打印(“装饰器结束”) Returnwrapper#注意不要在这里添加括号。 @demo deffunc_test(): 打印( 小白! )9500.163.com 直接使用自定义装饰器增强的原始方法。 带参数的装饰器: defdemo(func_test): defwrapper(名称): 打印(“定义的第一个装饰器”) func_test(名称) 打印( 哦,您是%s %name 。 打印(“装饰器结束”) returnwrapper @demo deffunc_test(名称): 打印( 你好,我叫% s % name) Python怎么实现装饰器-第1张图片。 是不是有点感觉。 然后是没有自定义参数的装饰器。 defdemo(func_test): defwrapper(*name,**kwargs): 打印(“定义的第一个装饰器”) func_test(*name,**kwargs) 打印( 哦,您是%s %name[0])。 打印( 您今年%s岁了 %name[1])。 打印(“装饰器结束”) returnwrapper @demo deffunc_test(姓名、年龄): 打印( 你好,我的名字是%s %name) 打印( 今年{} 。格式(年龄))Python怎么实现装饰器-第2张图片。 不是简短的回答吗?哈哈哈哈 多种装饰一起使用。 defdeco01(func): defwrapper(*

args,**kwargs):
 print( 第一层的装饰器 )
 func(*args,**kwargs)
 print( 第一层装饰器结束 )
 return wrapper
def deco02(func):
 def wrapper(*args,**kwargs):
 print( 这是第二层装饰器 )
 print( 第二层装饰器结束 )
 func(*args, **kwargs)
 return wrapper
@deco02
@deco01
def func(a,b,c,name):
 print( hello ,here is a func )
 print( result is %d  %(a+b+c))
 print( name:{} .format(name))

Python怎么实现装饰器-第3张图片

看看执行顺序可以看出装饰器是从上往下执行的。
类装饰器:
在使用装饰器时我们总不能在一个文件里写的都是装饰器和各个方法吧,总是要分开的。这里就要是讲一个类装饰器。
这里呢,我大概了写了一个读取文件装饰器的例子。

class Mydecorator():
 def __init__(self,func):
 # 定义为私有属性
 self.func = func
 # 实现__call__方法,让对象变成可以调用的对象,可调用的对象可以想函数那样使用
 def __call__(self, *args, **kwargs): 
 print( 测试类装饰器 )
 self.func(*args)
 catalogue = args[0]
 suffix = catalogue.split( . )[2]
 try:
 if suffix ==  json :
 with open(*args, r ,encoding= utf-8 ) as file_object:
 contents = json.load(file_object)
 print(contents)
 else:
 with open(*args, r ,encoding= utf-8 ) as file_object:
 contents = file_object.read()
 print(contents)
 except Exception as a:
 print( 读取文件出错拉:{} .format(a))
@Mydecorator
def name(name):
 print( 请输入对应文件路径:%s %name)

Python怎么实现装饰器-第4张图片

以上是“Python怎么实现装饰器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

抱歉,评论功能暂时关闭!