Python装饰器

装饰器实质上就是一个python函数,在保证原始业务代码不做任何修改的情况下利用切面的原则动态地增加额外的操作功能

def logging(func): # 接收一个当前执行函数或方法的对象fun(该对象为@logging装饰器声明的方法引用)
    def wrapper(*args, **kwargs):
        print("[Logging-INFO]:进入%s方法", func.__name__)
        return func(*args, **kwargs) # 基于fun对象实现核心业务方法的调用
    return wrapper

class Message:
    def print_title(self):
        print("南京科技公司")

    @logging
    def print_url(self):
        print("https://www.baidu.com")


if __name__ == "__main__":
    m = Message()
    # 不使用@符号传统装饰器包装方法
    title = logging(m.print_title) # 入参为函数,调用业务方法
    title() # 加括号表示调用装饰函数

    # 使用@装饰器调用
    m.print_url()
    print(m.print_title.__name__)
    

输出:
[Logging-INFO]:进入%s方法 print_title
南京科技公司
[Logging-INFO]:进入%s方法 print_url
https://www.baidu.com
print_title

对比使用装饰器方法:

  1. 不使用装饰器包装方法

title = logging(m.print_title) # 入参为函数,调用业务方法

title() # 加括号表示调用装饰函数

  1. 采用@装饰器方法更简洁

定义logging函数作为程序中的装饰器,函数接收一个当前执行函数或方法的对象func(该对象为@logging装饰器声明的方法引用)。同时在内部定义wrap()内嵌装饰函数,在此函数中实现日志的输出,并基于func对象实现核心业务方法的调用。

m.print_url()

 

posted @ 2023-03-26 23:12  Linazhu  阅读(10)  评论(0编辑  收藏  举报