美文网首页
类装饰器

类装饰器

作者: 蝉时雨丶 | 来源:发表于2020-05-11 17:39 被阅读0次

    装饰器函数其实是一个接口约束,它必须接受一个callable对象作为参数,然后返回一个callable对象。
    在python中,一般callable对象都是函数,但是也有例外。比如只要某个对象重写了call方法,那么这个对象就是callable的。

    当创建一个对象后,直接去执行这个对象,那么是会抛出异常的,因为他不是callable,无法直接执行,但进行修改后,就可以直接执行调用了,如下:

    class Test(object):
        def __call__(self, *args, **kwargs):
            print('call called')
    
    
    t = Test()
    print(t())
    

    输出为:

    call called
    

    下面,引入正题,看一下如何用类装饰函数。

    class Test(object):
        def __init__(self, func):
            print('test init')
            print('func name is %s ' % func.__name__)
            self.__func = func
        def __call__(self, *args, **kwargs):
            print('装饰器中的功能')
            self.__func()
    @Test
    def test():
        print('this is test func')
    test()
    

    输出结果为:

    test init
    func name is test 
    装饰器中的功能
    this is test func
    

    和之前的原理一样,当python解释器执行到到@Test时,会把当前test函数作为参数传入Test对象,调用init方法,同时将test函数指向创建的Test对象,那么在接下来执行test()的时候,其实就是直接对创建的对象进行调用,执行其call方法。

    相关文章

      网友评论

          本文标题:类装饰器

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