python__高级 : 类当作装饰器
Posted cccy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python__高级 : 类当作装饰器相关的知识,希望对你有一定的参考价值。
类在创建对象时,会调用 __init__ 初始化一些东西 , 然后 如果类中定义了 __call__ 方法,可以直接用 对象() 这种方法调用,所以可以用类来装饰函数:
class Test(object): def __init__(self, func): print(‘----装饰-----‘) print(‘func name is %s‘ % func.__name__) self.__func = func def __call__(self, *args, **kwargs): print(‘装饰器中的功能‘) self.__func() @Test def test(): print(‘------test-------‘) >>>----装饰----- func name is test
首先 @Test 就是 test = Test(test) 先创建了Test类的一个对象 这个时候 test 就不是指向函数了,而是一个 Test类的对象,传进去的参数 func 才是真正的 test 函数的引用,调用 __init__ 方法初始化之后,就是打印出来的效果.
然后如果调用 test() :
>>>----装饰----- func name is test 装饰器中的功能 ------test-------
因为现在 test是Test类的一个实例,所以 直接调用 test() 就相当于调用了 __call__ 方法 ,里面实现了打印一句话 以及调用传进去的 self.__func() 这个时候才执行了原本的 test 函数.
以上是关于python__高级 : 类当作装饰器的主要内容,如果未能解决你的问题,请参考以下文章
python 描述符 上下文管理协议 类装饰器 property metaclass
32.Python面向对象描述符运算符底层装饰器:闭包-闭包参数-内置装饰器-类装饰器