Question

Disons que j'ai les méthodes suivantes :

def methodA(arg, **kwargs):
    pass

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

Dans la méthode A, je souhaite appeler la méthode B, en transmettant les kwargs.Cependant, il semble que si je définis methodA comme suit, le deuxième argument sera transmis sous forme d'arguments de position plutôt que de variable nommée.

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

Comment puis-je m'assurer que les **kwargs de la méthodeA sont transmis en tant que **kwargs à la méthodeB ?

Était-ce utile?

La solution

Mettez les astérisques avant la variable kwargs.Cela oblige Python à transmettre la variable (qui est supposée être un dictionnaire) comme arguments de mot-clé.

methodB("argvalue", **kwargs)

Autres conseils

En aparté:Lorsque vous utilisez des fonctions au lieu de méthodes, vous pouvez également utiliser functools.partial :

import functools

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

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

La dernière ligne définira une fonction "bar" qui, lorsqu'elle sera appelée, appellera foo avec le premier argument défini sur "argvalue" et toutes les autres fonctions qui viennent d'être transmises :

bar(5, myarg="value")

appellera

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

Malheureusement, cela ne fonctionnera pas avec les méthodes.

Quelques expérimentations et j'ai compris celui-ci :

def méthodeA(arg, **kwargs) :méthodeB("valeurargument", **kwargs)

Cela semble évident maintenant...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top