python中使用装饰器为类增加logger属性和实现类型提示

使用过Java的都知道,使用Lombok+@Slf4j可以为类动态注入日志实例。

使用python该如何实现呢?

答案就是使用装饰器。

类装饰器

普通装饰器本质上就是一个函数,它接受函数作为参数,并返回新函数。

本文实现的是在一个类中动态添加属性,所以这里的实现可以称为类装饰器。既然是类装饰器,它要接受的参数就不是函数了,而是一个类。

然后,为这个类添加 logger 属性后,再将类返回。便完成了类装饰器的定义。

定义类装饰器

python 复制代码
import logging

def log_decorator(cls):
    cls.logger = logging.getLogger(cls.__name__)
    return cls

使用类装饰器

python 复制代码
@log_decorator
class FooService:
	
    def test(self):
        self.logger.info("This is a test log message.")

使用装饰器装饰后,就可以在类中的方法中使用logger属性了。

虽然使用是正常的,但是这里有个问题,就是没有类型提示。略显不完美,对代码可读性和开发体验不友好。

如何解决呢?

就是使用python类型注解。

增加类型提示

增加一条类型注解即可。

第3行是新增代码。

python 复制代码
@log_decorator
class FooService:
    logger: logging.Logger
    
    def test(self):
	self.logger.info("This is a test log message.")

我承认了,标题略微有点标题党哈哈。

只使用装饰器是无法直接实现有类型提示功能的。如果要有类型提示,还是要手动处理一下的。略显麻烦,对于开发体验来讲,这点麻烦是值得的。

相关推荐
woniu_maggie1 小时前
SAP 主数据 MDM 与MDG分析
后端
江湖中的阿龙1 小时前
AI Agent 调用工具怎么做才稳?参数校验、幂等与审计的 Python 实战
人工智能·python·ai agent·工具调用
1 小时前
正则少一个 re.MULTILINE,我的安全闸门全程空转——而我以为修好了
后端·代码规范
柠檬味拥抱1 小时前
脑肿瘤检测数据集 | 4400张YOLO医学影像数据集
后端
破茧蝴蝶1 小时前
Selenium4 Python 页面白屏监控方案
开发语言·python
柠檬味拥抱1 小时前
汽车损伤检测数据集 | 11700张YOLO车辆定损数据集
后端
柠檬味拥抱1 小时前
基于 YOLO11 的规模化禽舍鸡只行为视觉监测平台:从模型到 Streamlit 全流程实战
后端
y = xⁿ1 小时前
分享一下自己总结的RAG评测流程
人工智能·python
柠檬味拥抱1 小时前
火灾智能检测预警系统:从 YOLO11n 训练到 Streamlit 全链路实战【实战源码】
后端
言午说数据1 小时前
Paimon把LSM搬进湖里的得与失
大数据·后端