美文网首页
Python装饰器5-不使用语法糖的装饰器设计

Python装饰器5-不使用语法糖的装饰器设计

作者: dnsir | 来源:发表于2019-06-15 11:23 被阅读0次

    经过前面4篇文章对Python函数使用有了一定了解,下面开始实现自己的装饰器

    #! -*- coding: utf-8 -*-
    
    def a_new_decorator(a_func):
    
        def wrapTheFunction():
            print("I am doing some boring work before a_func()")
            # 比较难理解的是,这儿其实是个函数调用
            a_func()
    
            print("im am doing some boring work after a_func()")
        # 返回一个函数标签
        return wrapTheFunction
    
    def a_function_requiring_decoration():
        print("I am the function which need some decoration to remove my foul smell")
    
    #直接函数调用
    a_function_requiring_decoration()
    print(a_function_requiring_decoration.__name__)
    # 装饰器语法糖做了这么一件事情,在运行的时候
    a_function_requiring_decoration = a_new_decorator(a_function_requiring_decoration)
    print(a_function_requiring_decoration.__name__)
    a_function_requiring_decoration()
    
    

    执行结果:

    a_function_requiring_decoration
    wrapTheFunction
    I am doing some boring work before a_func()
    I am the function which need some decoration to remove my foul smell
    im am doing some boring work after a_func()
    

    发现通过上述方法也可以实现装饰器语法类似的作用。

    小结

    装饰器语法实现在运行时将待装饰的函数重新指向装饰后的函数,但是也发现了一个新的问题。
    装饰过的原函数__name__参数发生了变化,这是可以理解的,因为这里我们只是讲函数名重新指向一个新的函数,新的函数就是wrapTheFunction

    相关文章

      网友评论

          本文标题:Python装饰器5-不使用语法糖的装饰器设计

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