Pregunta

Digamos que tengo los siguientes métodos:

def methodA(arg, **kwargs):
    pass

def methodB(arg, *args, **kwargs):
    pass

En el métodoA deseo llamar al métodoB, pasando los kwargs.Sin embargo, parece que si defino methodA de la siguiente manera, el segundo argumento se pasará como argumentos posicionales en lugar de variables con nombre.

def methodA(arg, **kwargs):
    methodB("argvalue", kwargs)

¿Cómo me aseguro de que los **kwargs del métodoA se pasen como **kwargs al métodoB?

¿Fue útil?

Solución

Coloque los asteriscos antes de la variable kwargs.Esto hace que Python pase la variable (que se supone que es un diccionario) como argumentos de palabras clave.

methodB("argvalue", **kwargs)

Otros consejos

Como un aparte:Cuando uses funciones en lugar de métodos, también puedes usar functools.partial:

import functools

def foo(arg, **kwargs):
    ...

bar = functools.partial(foo, "argvalue")

La última línea definirá una función "barra" que, cuando se llame, llamará a foo con el primer argumento establecido en "argvalue" y todas las demás funciones recién pasadas:

bar(5, myarg="value")

llamará

foo("argvalue", 5, myarg="value")

Lamentablemente, eso no funcionará con los métodos.

Un poco de experimentación y descubrí esto:

def métodoA(arg, **kwargs):métodoB("valorarg", **kwargs)

Parece obvio ahora...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top