边肖告诉你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) 。
是不是有点感觉。
然后是没有自定义参数的装饰器。
defdemo(func_test):
defwrapper(*name,**kwargs):
打印(“定义的第一个装饰器”)
func_test(*name,**kwargs)
打印('哦,您是%s' %name[0])。
打印('您今年%s岁了' %name[1])。
打印(“装饰器结束”)
returnwrapper
@demo
deffunc_test(姓名、年龄):
打印('你好,我的名字是%s'%name)
打印('今年{} '。格式(年龄))。
不是简短的回答吗?哈哈哈哈
多种装饰一起使用。
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))
看看执行顺序可以看出装饰器是从上往下执行的。
类装饰器:
在使用装饰器时我们总不能在一个文件里写的都是装饰器和各个方法吧,总是要分开的。这里就要是讲一个类装饰器。
这里呢,我大概了写了一个读取文件装饰器的例子。
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怎么实现装饰器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/65905.html