Frage

Angenommen, ich habe die folgenden Methoden:

def methodA(arg, **kwargs):
    pass

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

In MethodeA möchte ich MethodeB aufrufen und die Kwargs weitergeben.Es scheint jedoch, dass wenn ich definiere methodA Wie folgt wird das zweite Argument als Positionsargumente und nicht als benannte Variablenargumente übergeben.

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

Wie stelle ich sicher, dass die **kwargs in MethodeA als **kwargs an MethodeB übergeben werden?

War es hilfreich?

Lösung

Setzen Sie die Sternchen vor die kwargs-Variable.Dadurch übergibt Python die Variable (von der angenommen wird, dass sie ein Wörterbuch ist) als Schlüsselwortargumente.

methodB("argvalue", **kwargs)

Andere Tipps

Nebenbei:Wenn Sie Funktionen anstelle von Methoden verwenden, können Sie auch functools.partial verwenden:

import functools

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

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

Die letzte Zeile definiert eine Funktion „bar“, die beim Aufruf foo aufruft, wobei das erste Argument auf „argvalue“ gesetzt ist, und alle anderen gerade übergebenen Funktionen:

bar(5, myarg="value")

werde anrufen

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

Mit Methoden klappt das leider nicht.

Nach ein paar Experimenten habe ich Folgendes herausgefunden:

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

Scheint jetzt offensichtlich...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top