美文网首页
装饰器(三)-类装饰器

装饰器(三)-类装饰器

作者: mysimplebook | 来源:发表于2019-12-24 12:44 被阅读0次

前面提到的都是def定义的装饰器函数,实际上也可以使用一个类装饰函数。在python中,一般callable对象都是函数,但是也有例外,比如只要某个对象重写了call方法,那么这个对象就是callable的。类就需要定义一个__call__方法变成callable,且在__init__方法中声明一个参数,用于引用被修饰函数,从而实现一个类装饰器。如

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 init

func name is test

>>> test()

定义一些装饰器中的功能

this is test func

>>> 

 

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

>>> test=Test(test)                                 #传入原test函数

test init

func name is test

>>> test()

定义一些装饰器中的功能

this is test func

>>> 

相关文章

  • 装饰器

    """@装饰器- 普通装饰器- 带参数的装饰器- 通用装饰器- 装饰器装饰类- 内置装饰器- 缓存装饰器- 类实现...

  • typescript 五种装饰器

    装饰器类型 装饰器的类型有:类装饰器、访问器装饰器、属性装饰器、方法装饰器、参数装饰器,但是没有函数装饰器(fun...

  • 装饰器

    装饰器 decorator类装饰器 带参数的装饰器 举例(装饰器函数;装饰器类;有参与无参) https://fo...

  • 装饰器(三)-类装饰器

    前面提到的都是def定义的装饰器函数,实际上也可以使用一个类装饰函数。在python中,一般callable对象都...

  • TS装饰器初体验,用装饰器管理koa接口

    typescript中的装饰器有很多种,比如类装饰器、方法装饰器、属性装饰器等等,先看看装饰器的定义吧,下面以类装...

  • Python | 装饰器

    使用场景 装饰器 ' @ ' 使用 带参数装饰器 装饰器类

  • Python装饰器

    Python装饰器 一、函数装饰器 1.无参装饰器 示例:日志记录装饰器 2.带参装饰器 示例: 二、类装饰器 示例:

  • Python中的装饰器

    Python中的装饰器 不带参数的装饰器 带参数的装饰器 类装饰器 functools.wraps 使用装饰器极大...

  • TypeScript装饰器

    前言 装饰器分类 类装饰器 属性装饰器 方法装饰器 参数装饰器需要在tsconfig.json中启用experim...

  • 装饰器4

    装饰器装饰类 使用类装饰器的时候,记得要返回被装饰的类调用的结果装饰器函数 再 init 之前执行 例子1:给类添...

网友评论

      本文标题:装饰器(三)-类装饰器

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