如何在Python

时间:2016-11-08 09:46:08

标签: python function arguments dry inspect

我有一个Python类,其中有几种不同的方法可以执行不同的操作,但我希望它们在运行时能够保存其名称和参数值,以便以后可以使用它们。我发现的一种方法是向每个人添加这样的东西:

frame = inspect.currentframe()
args, _, _, values = inspect.getargvalues(frame)
function_name = inspect.getframeinfo(frame)[2]
function_meta = {arg: values[arg] for arg in args}
self.meta[function_name] = function_meta

这很好,但是,我更喜欢将其保持干燥状态,并且不必将此相同的代码段复制/粘贴到我添加的每个方法中。

或者,我可以将其转换为单独的函数save_meta(),但是inspect将返回save_meta()的数据,而不是调用它的函数,对吧?是否有任何优雅和可重复使用的解决方法?

1 个答案:

答案 0 :(得分:1)

您似乎只依赖于inspect的当前帧。我建议

def save_meta(frame):
    args, _, _, values = inspect.getargvalues(frame)
    function_name = inspect.getframeinfo(frame)[2]
    function_meta = {arg: values[arg] for arg in args}
    self.meta[function_name] = function_meta

并用

调用它
save_meta(inspect.currentframe())