2016-11-08 100 views
0

我有一个Python类,它有几种不同的方法来做不同的事情,但是我希望它们中的每一个在运行时保存它的名称和参数值,以便我可以稍后使用它们。我发现一种方法是这样的添加到他们每个人:如何在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

您似乎只依赖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()) 
+0

啊该死调用它,你是对的,这是很基本的。 :) 谢谢!奖金问题:有没有更简单的方法来做到这一点? – machaerus

+0

@machaerus对不起,我刚才看到你的问题。你更容易什么意思? – pingul

+0

我认为也许有一种方法可以在不编写自定义函数的情况下执行此操作。它看起来像一个非常基本的功能,我有点惊讶,没有内置的方法。 – machaerus