美文网首页
python语言之三:python装饰器

python语言之三:python装饰器

作者: Wu杰语 | 来源:发表于2018-06-18 18:26 被阅读0次

    不带参数的装饰器

    python装饰器也是python解释器下的一颗语法糖。形式上如下:

    def mywraper(fun):
        def inner():
          do somethting
          fun()
       return inner
    
    @mywraper
    def myfun():
        dosomething
    

    接着解释器出马了,执行myfun()的时候,会加上解释器的部分,把myfun变成 mywraper(fun)。

    带参数的装饰器

    def mywraper(paras):
        def inner(func):
           def inside():
              do somethting
              fun()
          return inside
       return inner
    
    @mywraper(paras)
    def myfun():
        dosomething
    

    不带参数的和带参数的都使用了高阶函数的概念,所不同的是,带参数的比不带参数的多了一层函数作为返回值。

    类装饰器

    class A:
       # Decorator as an instance method
      def decorator1(self, func):
            @wraps(func)
            def wrapper(*args, **kwargs):
                print('Decorator 1')
                return func(*args, **kwargs)
            return wrapper
    
    @classmethod
        def decorator2(cls, func):  
        @wraps(func)
        def wrapper(*args, **kwargs):
            print('Decorator 2')
            return func(*args, **kwargs)
        return wrapper
    
     用法上
    a = A()
    @a.decorator
     def myfun():
    
    @A.decorator2
    def myfun()
    

    装饰器放在类中最典型的例子是Property,Porperty是个函数装饰器,python解释器将这个被property装饰的函数名字变成一个propery成员,接着可以用@name.setter @name.getter这两个类装饰器。

    装饰器的作用很强大,但是要清楚这是语法糖,不要被语法糖所迷惑。

    相关文章

      网友评论

          本文标题:python语言之三:python装饰器

          本文链接:https://www.haomeiwen.com/subject/sobneftx.html