我想动态地设置实例方法的默认键参数。例如,向方法动态添加键参数
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