美文网首页
Python装饰器16-正确使用装饰器类

Python装饰器16-正确使用装饰器类

作者: dnsir | 来源:发表于2019-06-16 00:01 被阅读0次

在Python装饰器15的章节中提到使用类作为装饰器之后,函数的属性发生变化,在之前是使用@wrap(func),同理使用类作为装饰器也有类似的方法的来实现。

正确使用类作为装饰器


from functools import wraps

class Profiled:

    def __init__(self, func):
        wraps(func)(self)
        # self.func = func

    def __call__(self, *args, **kwargs):
        print("call")
        return self.__wrapped__(*args, **kwargs)
    
@Profiled
def add(x, y):
    return x + y

print(add.__name__)
result = add(1, 2)
print(result)

执行结果:

add
call
3

发现结果是预期的了。
根据Python官网文档, wraps(func)(self)本质是为类实例增加一个__wrapped__作为类实例属性,所以self.__wrapped__本质就是add函数。

小结

现在我们已经会将类作为装饰器正确使用了,似乎定义了__call__方法就什么问题就解决了,那么真的是如此吗?

相关文章

  • Python装饰器16-正确使用装饰器类

    在Python装饰器15的章节中提到使用类作为装饰器之后,函数的属性发生变化,在之前是使用@wrap(func),...

  • Python中的装饰器

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

  • 如何定义类方法和静态方法?(转译)

    要在python中定义类方法,我们使用@classmethod装饰器,并使用@staticmethod装饰器定义静...

  • Python | 装饰器

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

  • Python装饰器

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

  • 解惑,从新认识python装饰器

    概念 python有两种装饰器: 函数装饰器(function decorators) 类装饰器(class de...

  • 装饰器

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

  • 透析Python装饰器--透过现象看本质

    》眼花缭乱 Python的装饰器(也称语法糖)大致分为这几类: 无参数装饰器 有参数装饰器 装饰类的装饰器 无参数...

  • 透析Python装饰器-------------透过现象看本质

    》眼花缭乱 Python的装饰器(也称语法糖)大致分为这几类: 无参数装饰器 有参数装饰器 装饰类的装饰器 无参数...

  • 装饰器4

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

网友评论

      本文标题:Python装饰器16-正确使用装饰器类

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