python – 动态地向方法添加键参数
作者:互联网
我想动态设置实例方法的默认键参数.例如,用
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}
任何建议或想法都是受欢迎的.
关于上下文的一点点:
Module类是某种函数包装器,可以用来自动包含数据流系统中的低端函数,但是可以添加中间过程.我希望模块运行函数(实际上,它可能是它的__call___函数)拥有正确的API,以便数据流系统能够透明地生成正确的模块输入.
我正在使用python 2.7
解决方法:
kwargs是一本字典,我们需要做的就是保存它以供日后使用.然后用户可以用它们的值覆盖它.
class Module(object):
def __init__(self, **kwargs):
self.defaults = kwargs
def run(**kwargs):
values = dict(self.defaults.items() + kwargs.items())
print values
编辑
您是否正在寻找lambda函数生成?
def wrapfunc(**kwargs):
def run(kwargs):
print kwargs
return lambda x: run(dict(kwargs.items() + x.items()))
run = wrapfunc(ans=42)
run({})
run({'ans':12})
标签:python,methods,dynamic,named-parameters 来源: https://codeday.me/bug/20190625/1284557.html