Как мне написать обертку, которая добавляет и добавляет код на основе аргументов ... Вот оригинальный метод:
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 .....
ИЛИ если нет Я в порядке в жестком кодировании параметров из get go. (Я бы даже предпочел это для краткости. Может быть даже @pre_post)
Я думаю, что мой arg_xxx = 'rv' немного ненадежен, но не могу понять иначе.
my работа в процессе, еще не проверена:
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