python 类中的某个函数作为装饰器

Posted 雅思敏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 类中的某个函数作为装饰器相关的知识,希望对你有一定的参考价值。

在python的类中,制作一个装饰器的函数,

 

class A:
    def wrapper(func):   ###装饰器
        def wrapped(self,*arg,**kwargs)
             ...
        return wrapped

    @ wrapper              ###装饰mix
    def  mix():
         ...

 

 

当调用mix的时候,self.mix() ,会将self等参数传入 wrapper 中来吗?答案为否。

当wrapper作为装饰器的并且@wrapper这种方式作为装饰的时候,wrapper就跟普通的函数一样,仅仅接收被装饰的函数作为参数,并不会对装饰器传入额外的任何self,cls等参数,而类就相当于一个命名空间而已。

wrapper本身用@staticmethod,与@classmethod装饰,会得出错误。

staticmethod object is not callable

classmethod object is not callable

因为装饰器必须是能够被调用的对象,而wrapper被@staticmethod,与@classmethod装饰过后,就不是一个可被调用的对象了。

 

以上是关于python 类中的某个函数作为装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python 装饰器装饰类中的方法

06-python中的装饰器

一文带你了解 Python 中的装饰器

python使用上下文对代码片段进行计时,非装饰器

类中的装饰器在Pycharm中抛出警告

Python 装饰器作为 Dash 中的回调使用作为实例变量的 Dash 对象 - 失败