09月22日, 2014 146次
普通装饰器:
,编码就行了。 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怎么实现装饰器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!