如何在 Python 中保存 class 方法的元数据

How to save class method's meta data in Python

我有一个 Python class 有几个不同的方法做不同的事情,但我希望每个方法在运行时保存其名称和参数值,这样我以后可以使用它们。我发现的一种方法是向它们中的每一个添加这样的内容:

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

这很好,但是,我更愿意将其保持干燥,并且不必 copy/paste 与我添加的 every 方法相同的代码段。

或者,我可以将它变成一个单独的函数 save_meta(),但是 inspect 将 return save_meta() 的数据,而不是调用它的函数, 正确的?有什么优雅且可重复使用的方法可以解决这个问题吗?

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