Domanda

Diciamo che ho i seguenti metodi:

def methodA(arg, **kwargs):
    pass

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

Nel metodo A desidero chiamare il metodo B, trasmettendo i kwargs.Tuttavia, sembra che se definisco methodA come segue, il secondo argomento verrà passato come argomenti di variabile posizionale anziché denominata.

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

Come posso assicurarmi che **kwargs nel metodo A venga passato come **kwargs al metodoB?

È stato utile?

Soluzione

Metti gli asterischi prima della variabile kwargs.Questo fa sì che Python passi la variabile (che si presuppone sia un dizionario) come argomenti di parole chiave.

methodB("argvalue", **kwargs)

Altri suggerimenti

Per inciso:Quando usi le funzioni invece dei metodi, puoi anche usare functools.partial:

import functools

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

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

L'ultima riga definirà una funzione "bar" che, quando chiamata, chiamerà foo con il primo argomento impostato su "argvalue" e tutte le altre funzioni appena passate:

bar(5, myarg="value")

chiamerà

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

Sfortunatamente ciò non funzionerà con i metodi.

Alcuni esperimenti e ho capito questo:

def metodoA(arg, **kwargs):metodoB("valoreargomento", **kwargs)

Sembra ovvio adesso...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top