很多小伙伴想知道 python中装饰器是什么?那么今天小编就通过这篇文章来给大家详细讲解一下python之装饰器,感兴趣的小伙伴可以仔细阅读一下这篇文章。
对于什么是装饰器,小编认为比较官方的解释是:
装饰器是用来管理和调用函数和类的一个可调用对象,也就是说分为函数装饰器和类装饰器。
这个定义函数我自己通俗化了一点,不然更加看不懂,其实我还有一句更加概括的话,可以解释装饰器:
装饰器就是对被装饰的对象(函数、类)进行重构的,其可以在不改变原来对象的情况下调用对象时执行重构后的行为。
首先,装饰器的语法你肯定知道
def decorator(f): def wrapper(x,y): return x+y return wrapper @decorator def func(x,y): return 1 func(3,4)
(1)decorator是什么意思?
(2)这里重构的行为是什么?
(3)整个装饰的行为或者说流程是怎么样的?
通过看小编的这一段代码,很显然的能发现,装饰器就是一个可调用的对象,在上面的装饰器它就是一个函数。那么重构的行为是什么?
上面的一段代码的重构行为就是讲func的执行代码替换成了wrapper的执行代码,也就是说,代码的**终输入是 7 而不是 1。
这一句话大家一定要牢牢记住:装饰器本身接受被装饰的对象,装饰器返回的可调用对象接受被装饰对象的所有参数
一定要仔细看这句话,理解加记忆!
总结:在上面那一段代码中,装饰器是: decorator;返回的可调用对象是: wrapper;被装饰的对象是 :func。好了,你先在套这个你去看看这个这个函数的执行流程。
当然,这时候你还会有一个疑问:当调用func(3,4)的时候发生了什么?
此时:返回的可调用对象(wrapper)给了func,你也可以理解为现在的func的代码是
def func(x,y): return x+y
这时的func就完全不是自己本身定义的func的,它是不是在某种意义上算是被重构了!
到这里你是不是理解了什么是装饰器,应该是理解了!
不过我们还没有结束,因为我要让你彻底的了解什么是装饰器!
之前我们说过,不止有函数装饰器,还有类装饰器,那接下来我们就看看类装饰器是怎么工作的,我还是要把之前那段话贴在这里,你别忘了!
装饰器本身接受被装饰的对象,装饰器返回的可调用对象接受被装饰对象的所有参数
class Decorator: def __init__(self,f): self.func = f def __call__(self,x,y): return self.func(x,y) + 1 @Decorator def func(x,y): return x+y func(3,4) # 你来想想这时候的结果是什么?
我们来一步步的分析一下,
首先,我们说装饰器只接受被装饰的对象做参数,也就是说此时有
Decorator(func) # 这段代码对应着第一句话 # 接下来是 func(3,4) # 这句话是不是触动了__call__方法 # 接下来就是第二句话:返回的可调用对象接受被装饰对象的所有参数 # 所以3,4就被传递给了__call__方法 # 此时的func是什么 return self.func(x,y) + 1 # 也就是说结果为8,而不是7
接下来来点难的看看:
def decorator(f): def wrapper(self,x,y): return self.name + x + y return wrapper class C: name = '土' @decorator def method(x,y): return x + y ins = C() myname = ins.method('行','孙')
以上就是小编给大家带来的python装饰器相关知识点了,希望大家通过阅读小编的文章之后能够有所收获!如果大家觉得小编的文章不错的话,可以多多分享给有需要的人。
更多python相关文章请访问分类:python
【版权声明】本文图文出自大盘站@dapan.cc,转载请注明出处!