我想動態地設置實例方法的默認鍵參數。例如,向方法動態添加鍵參數
class Module(object):
def __init__(self, **kargs):
set-default-key-args-of-method(self.run, kargs) # change run arguments
def run(self, **kargs):
print kargs
我們將有:
m = Module(ans=42)
m.run.im_func.func_code.co_argcount # => 2
m.run.im_func.func_code.co_varnames # => ('self','ans','kargs')
m.run.im_func.func_defaults # => (42,)
m.run() # print {'ans':42}
我試着用types.CodeType(我真的不明白)東西的功能(不是方法),並得到了工作(井不是失敗),但添加的鍵參數沒有顯示在函數的kargs字典中(僅打印{})
只能對當前實例進行更改。實際上,我現在正在使用一個類(我腦子裏是OO),所以我想用類方法來做,但一個函數可能會更好。例如:
def wrapped_run(**kargs):
def run(**key_args):
print key_args
return wrap-the-run-function(run, kargs)
run = wrapped_run(ans=42)
run.func_code.co_argcount # => 1
run.func_code.co_varnames # => ('ans','key_args') ## keep the 'key_args' or not
run.func_defaults # => (42,)
run() # print {'ans':42}
任何意見或建議,歡迎任何意見。
小上下文:
模塊類是某種函數包裝,其可以是使用自動包括在數據流系統中的較低端的功能,但添加中間程序。我希望模塊運行函數(實際上,它可能是__call___函數)具有正確的API,以便數據流系統能夠透明地良好地生成正確的模塊輸入。
我正在使用python 2.7
如果你想這是值得一問將函數添加到綁定方法或未綁定方法(例如,它們是否應該隻影響當前實例或類的每個實例?) – mgilson 2013-05-02 12:36:23
Sooo,你希望有一個可以在運行時配置的函數的「管道」,以便數據通過? – 2013-05-02 12:38:01
@mgilson,對,僅針對當前實例 – 2013-05-02 12:38:03