2016-11-08 8 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 

これは結構です、しかし、私はに、この同じスニペットを貼り付け/ DRYそれを維持することを好むだろうとコピーする必要はありませんすべて方法を追加します。

また、私は別の関数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

関連する問題