Estoy escribiendo un decorador que necesita llamar a otras funciones antes de llamar a la función que está decorando. La función decorada puede tener argumentos posicionales, pero las funciones que el decorador llamará solo pueden aceptar argumentos de palabra clave. ¿Alguien tiene una forma práctica de convertir los argumentos de posición en argumentos de palabra clave?Python convertir args en kwargs
sé que puedo obtener una lista de los nombres de las variables de la función decorada:
>>> def a(one, two=2):
... pass
>>> a.func_code.co_varnames
('one', 'two')
Pero no puedo encontrar la manera de decir lo que se aprobó en posicionalmente y lo que era como palabra clave.
Mi decorador se ve así:
class mydec(object):
def __init__(self, f, *args, **kwargs):
self.f = f
def __call__(self, *args, **kwargs):
hozer(**kwargs)
self.f(*args, **kwargs)
¿Hay una manera que no sea sólo comparando kwargs y co_varnames, añadiendo a todo lo que no kwargs allí, y esperando lo mejor?
¿Por qué lo que necesita saber cuáles eran args posicional? –
Porque necesito convertirlos a kwargs para llamar a la función hozer. Esta función solo acepta kwargs, pero necesita conocer todos los argumentos originalmente llamados. Entonces, dependiendo de si la gente llama a la función decorada con argumentos posicionales o con nombre, la función hozer puede o no obtener todos los datos que necesita. – jkoelker