You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python当前版本是否有内置方法调用记录装饰器?

Python方法调用记录方案及内置支持情况

以下代码(或基于inspect模块的自定义方案)可用于记录方法调用:

import logging, sys

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logger = logging.getLogger()

def log(func):
    def logged(*args, **kwargs):
        logger.info(f"{func.__name__} starting with {args=} {kwargs=}...")
        result = func(*args, **kwargs)
        logger.info(f"{func.__name__} finished.")
        return result
    return logged

class A:
    @log
    def foo(self, x, y):
        pass

    @log
    def bar(self, x, y):
        1/0

a = A()
a.foo(2, y=3)
a.bar(2, y=3)

运行后输出示例:

INFO:root:foo starting with args=(<__main__.A object at 0x0000000002784EE0>, 2) kwargs={'y': 3}...
INFO:root:foo finished.
INFO:root:bar starting with args=(<__main__.A object at 0x0000000002784EE0>, 2) kwargs={'y': 3}...
...

当前Python的内置解决方案情况

Python标准库中没有专门用于自动记录方法调用的开箱即用工具,无论是logging模块还是其他核心模块,都没有提供直接实现这种方法调用日志的内置装饰器或功能。

不过可以借助标准库中的工具组合实现更完善的效果:

  • logging模块作为日志输出基础,负责日志的格式化、输出渠道管理;
  • inspect模块可精细获取方法参数信息,比如区分位置参数与关键字参数、过滤实例self参数,优化日志内容;
  • functools.wraps可保留原函数元信息,让日志中的函数名、文档字符串等更准确。

如果需要更成熟的实现,通常需要自行编写装饰器,或使用第三方库简化开发。

内容的提问来源于stack exchange,提问作者Basj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:19:58