美文网首页
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