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

相關問題