目前,我通常会在函数中添加一个日志行,其中包含输入和返回的变量的详细信息。但是,我正在寻找一种优雅的方式。
有没有办法记录函数的每个输入以及使用某种形式的魔术方法返回的内容?
以下是一个例子,
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
这里我想记录返回的变量以及使用尽可能少的代码为每个函数输入的内容。
答案 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是一个关于理解装饰器的好博客。