边肖告诉你Python是如何实现装饰器的 。相信大部分人还是不太了解他们 。因此,我想分享这篇文章供你参考 。希望你看完这篇文章后收获多多 。让我们一起来看看 。普通装饰器:
,编码就行了 。defdemo(func_test):defwrapper():打印(“定义的第一个装饰器”)func_test()打印(“装饰器结束”)Returnwrapper#注意不要在这里添加括号 。@demodeffunc_test():打印( 小白! )9500.163.com直接使用自定义装饰器增强的原始方法 。带参数的装饰器:defdemo(func_test):defwrapper(名称):打印(“定义的第一个装饰器”)func_test(名称)打印( 哦,您是%s %name。打印(“装饰器结束”)returnwrapper@demodeffunc_test(名称):打印( 你好,我叫% s % name)。是不是有点感觉 。然后是没有自定义参数的装饰器 。defdemo(func_test):defwrapper(*name,**kwargs):打印(“定义的第一个装饰器”)func_test(*name,**kwargs)打印( 哦,您是%s %name[0]) 。打印( 您今年%s岁了 %name[1]) 。打印(“装饰器结束”)returnwrapper@demodeffunc_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))@Mydecoratordef name(name): print( 请输入对应文件路径:%s %name)
【Python怎么实现装饰器】以上是“Python怎么实现装饰器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
推荐阅读
- springboot中如何整合log4g2
- CSS中解决div列高度自适应的3种常用方法分别是什么
- JavaScript中数组Array的常用方法有哪些
- Java中如何把二叉搜索树转换为累加树
- 锅具如何选择
- mysql中动态语句编写的引号怎么用
- 醋泡蒜用什么蒜好
- 以精细化助推电商消费升级
- 11月起,电动三轮、四轮想要“合法上路”不被罚,要做好三件事