什么是python装饰器?如何使用python装饰器?

这篇文章给大家分享有关什么是python装饰器?如何使用python装饰器?的内容 。我觉得挺实用的,因此分享给大家做个参考,希望对大家有所帮助 。

什么是python装饰器?如何使用python装饰器?

文章插图
首先,什么是装饰器?
【什么是python装饰器?如何使用python装饰器?】python装饰器其实就像是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象 。对被装饰的对象(函数、类)进行重构的,其可以在不改变原来对象的情况下调用对象时执行重构后的行为,很多python初学者学到面向对象类和方法是一道大坎,那么python中的装饰器是你进入Python高级语法大门的一道坎 。
首先,我们来看看装饰器的语法结构:
def decorator(f):    def wrapper(x,y):        return x+y    return wrapper@decoratordef func(x,y):    return 1func(3,4)看以上的代码是不是会存在很多疑问,比如:decorator是什么意思?整个装饰的流程是怎么样的?
看上面以上代码,我说过装饰器就是一个可调用对象,在上面的装饰器中它就是一个函数 。装饰器本身接受被装饰的对象,装饰器返回的可调用对象接受被装饰对象的所有参数 。
Decorator它就是一个装饰器,返回的可调用对象是: wrapper,而被装饰的对象是func 。
举个例子,如果调用func(3,4)的时候发生了什么?此时:返回的可调用对(wrapper)给了func,你也可以理解为以下的func的代码是,返回值就是x+y的值 。
def func(x,y):    return x+y这时的func就完全不是自己本身定义的func的,在某种意义上我们称它被重构了 。到这里你是不是理解了什么是装饰器了呢 。
其实不止有函数装饰器,还有类装饰器,那接下来我们就看看类装饰器是怎么工作的,请记住装饰器本身接受被装饰的对象,装饰器返回的可调用对象接受被装饰对象的所有参数 。
class Decorator:    def __init__(self,c):        self.func = c    def __call__(self,x,y):        return self.func(x,y) + 1@Decoratordef func(x,y):    return x+yfunc(4,5)我们一起来分析一下以上代码吧,首先,我们说装饰器只接受被装饰的对象做参数,也就是说此时有
Decorator(func) # 这段代码对应着第一句话
 # 接下来是
func(4,5) # 这句话触动了__call__方法
 # 接下来就是第二句话:返回的可调用对象接受被装饰对象的所有参数
 # 所以4,5就被传递给了__call__方法
 # 此时的func是什么
 return self.func(x,y) + 1 # 也就是说结果为10,而不是9
再接着往下看:
def decorator(f):    def wrapper(self,x,y):        return self.name + x + y    return wrapperclass A:    name = '孙'    @decorator    def method(x,y):        return x + yins = A()myname = ins.method('行','者')这个问题留给大家去解答 。
关于什么是python装饰器?如何使用python装饰器?就分享到这里了,希望以上内容可以对大家所帮助,让大家可以学到更多知识 。

推荐阅读