Ответ 1
Поместите звездочки перед переменной kwargs. Это заставляет Python передавать переменную (которая считается словарем) в качестве аргументов ключевого слова.
methodB("argvalue", **kwargs)
Скажем, у меня есть следующие методы:
def methodA(arg, **kwargs):
pass
def methodB(arg, *args, **kwargs):
pass
В методе A я хочу называть метод B, передавая kwargs. Однако кажется, что если я определяю methodA
следующим образом, второй аргумент будет передаваться как позиционный, а не именованный аргумент переменной.
def methodA(arg, **kwargs):
methodB("argvalue", kwargs)
Как я могу убедиться, что ** kwargs в методе A передается как ** kwargs в метод B?
Поместите звездочки перед переменной kwargs. Это заставляет Python передавать переменную (которая считается словарем) в качестве аргументов ключевого слова.
methodB("argvalue", **kwargs)
В стороне: при использовании функций вместо методов вы также можете использовать functools.partial:
import functools
def foo(arg, **kwargs):
...
bar = functools.partial(foo, "argvalue")
В последней строке будет определена функция "bar", которая при вызове вызовет foo с первым аргументом, установленным в "argvalue" и всеми остальными функциями, которые просто передаются:
bar(5, myarg="value")
вызовет
foo("argvalue", 5, myarg="value")
К сожалению, это не будет работать с методами.
Некоторые эксперименты, и я понял это:
def methodA (arg, ** kwargs): methodB ( "argvalue", ** kwargs)
Теперь кажется очевидным...