记录每个功能的每个进出

时间:2016-10-07 06:40:19

标签: python

目前,我通常会在函数中添加一个日志行,其中包含输入和返回的变量的详细信息。但是,我正在寻找一种优雅的方式。

有没有办法记录函数的每个输入以及使用某种形式的魔术方法返回的内容?

以下是一个例子,

class exampleclass(object):
    def __init__(self,size=False):
        self.size = size

    def funt1(self,weight=None):
        return weight

    def funt2(self,shape=None):
        return shape

这里我想记录返回的变量以及使用尽可能少的代码为每个函数输入的内容。

1 个答案:

答案 0 :(得分:4)

decorators in python的概念。它们可以帮助您抽出您希望注入任何函数的常用代码。制作一个名为getTable的装饰器,如下所示:

log

现在,您可以将此装饰器用于任何功能,如下所示:

import logging
from functools import wraps

def log(func):
    @wraps(func)
    def wrapper(self, *args, **kwargs):
            logging.debug("args - %s", str(args))
            logging.debug("kwargs - %s", str(kwargs))
            response = func(self, *args, **kwargs)
            logging.debug("response - %s", str(response))
            return response
    return wrapper

以上代码将记录所有参数&他们返回的值只有一行代码。

Here是一个关于理解装饰器的好博客。