Pylance включает аргументы из другой функцииPython

Программы на Python
Anonymous
Pylance включает аргументы из другой функции

Сообщение Anonymous »

Скажем, у меня есть некоторая функция a.

Код: Выделить всё

def a(*,a_arg1:str,a_arg2:int):
...#Does something
Затем я хочу создать другую функцию, которая включает в себя некоторые функции a и, следовательно, должна принимать аргументы ее ключевых слов. Я могу сделать это так:

Код: Выделить всё

def b(*,b_arg1:str,**kwargs):
a(**kwargs)
Это работает, если у меня есть только одна функция, от которой я могу наследовать аргументы, в противном случае распаковка kwargs должна быть немного сложнее, чтобы избежать исключений для дополнительных аргументов. Эту проблему, вероятно, можно довольно легко решить с помощью проверки, и это не является большой проблемой. Другая основная проблема, однако, заключается в том, что pylance не знает, какими должны быть кварги, и не будет показывать подсказки для этих аргументов во время кодирования. Что мне очень нравится в моем беспорядке кода.
Другое основное решение — просто добавить каждый аргумент ключевого слова по отдельности, но при этом возникает проблема, что его очень сложно редактировать. Мне нужно будет изменить аргументы a, аргументы b и везде, где в b вызывается a.
Я спрашиваю, есть ли в Python функция, назовем ее magic, где я могу сделать что-то вроде:

Код: Выделить всё

@magic(a)
def b(*,b_arg1:str,**kwargs):
a(**kwargs)
И это указывает на то, что аргументы a не только добавляются к аргументам b, но и являются обязательными или нужны определенные типы по мере необходимости. Эта магическая функция на самом деле не должна ничего делать, но она подсказывает, что содержится в **kwargs, таким образом, чтобы ее можно было легко редактировать.
Это не критично для моей программы или чего-то еще, но это, безусловно, сделало бы работу намного проще и быстрее, учитывая то, как я склонен писать код.
Я смотрел на вещи, которые кажутся такими может (только по имени) быть тем, что я ищу, например functools.wraps. functools.partial близок к тому, что я хочу, но мне нужно в противоположном направлении, добавляя больше аргументов.
Есть ли хороший способ сделать это? Существует ли моя волшебная функция? Кто-нибудь еще сталкивался с этой проблемой и знает, как с ней справиться?

Подробнее здесь: https://stackoverflow.com/questions/786 ... r-function

Вернуться в «Python»