【发布时间】:2020-06-24 01:01:42
【问题描述】:
如何编写一个基于参数添加和添加代码的包装器。 这是原始方法:
def method(self, arg1, arg2, arg3, ret='abc'):
arg1 = pre_fun(arg1)
rv = None
..... code ....
if ret == 'abc' : return abc_fun(rv)
if ret == 'efg' : return efg_fun(rv)
想把它转换成类似的东西:
@pre(fun=pre_fun, arg='arg1')
@post(ret1=abc_fun, arg_ret1='rv', ret2=efg_fun, arg_ret2='rv')
def method(self, arg1, arg2, arg3, ret='abc'):
rv = None
....... code .....
我知道它不完全是这样的。可能吗。 我也可以有默认值,所以我可以说:
@pre
@post
def method(self, arg1, arg2, arg3, ret='abc'):
rv = None
....... code .....
或者如果不是我可以硬编码从一开始就设置参数。 (我什至更喜欢它的简短性。甚至可能是@pre_post)
我认为我的 arg_xxx='rv' 有点不稳定,但无法想象其他方式。
我的工作正在进行中,尚未测试:
def pp(fun):
@functools.wraps(fun)
def wrapper(*args, **kwargs):
args[0] = xbitx(args[0])
fun(*args, **kwargs)
if ret == 'numpy' : return args[0]
return iSDP(val=args[0], size=kwargs['size'], spaOnbits=kwargs['spaOnbits'])
return wrapper
【问题讨论】:
标签: python post decorator wrapper pre