Python有参/无参修饰器函数和修饰器类的用法

Posted 算法与编程之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python有参/无参修饰器函数和修饰器类的用法相关的知识,希望对你有一定的参考价值。

本文主要介绍Python编程语言中常见的修饰器函数及修饰器类的用法。

问题

方法

无参修饰器函数


def aop(foo):
    def wrapper():
        print('before')
        foo()
        print('after')
    
    return wrapper

@aop # 修饰器函数
def say_hello():
    print('hello')
    
if __name__ == '__main__':
    say_hello()

有参修饰器函数

from functools import wraps

def aop(foo):
    @wraps(foo) #! 提供参数
    def wrapper(*args, **kwargs): #!
        print('before')
        foo(*args, **kwargs) #! 容易出错
        print('after')
    
    return wrapper

@aop # 修饰器函数
def say_hello(name):
    print('hello', name)
    
if __name__ == '__main__':
    say_hello(name = 'chen')

修饰器类

from functools import wraps

class AOP:
    
    def __call__(self, foo):
        @wraps(foo)
        def wrapper(*args, **kwargs):
            print('before')
            foo(*args, **kwargs)
            print('after')
        
        return wrapper #! 容易出错
            
@AOP() #! 注意是实例化对象
def say_hello(name):
    print('hello', name)
    
if __name__ == '__main__':
    '''
    Exception has occurred: TypeError
    'NoneType' object is not callable
    '''
    say_hello(name='chen')

结语

以上是关于Python有参/无参修饰器函数和修饰器类的用法的主要内容,如果未能解决你的问题,请参考以下文章

Python专栏目录(持续更新中,强烈建议收藏)

Python专栏目录(持续更新中,强烈建议收藏)

java:面向对象(Leak filling)

Java类的有参无参方法

ES6(Decorator(修饰器))

装饰器、装饰器类与类装饰器(三)