Использование распакованного TypedDict для указания аргументов функцииPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Использование распакованного TypedDict для указания аргументов функции

Сообщение Anonymous »

Мне было интересно, возможно ли следующее с помощью TypedDict и Unpack, вдохновленных PEP 692...
Обычный способ использования TypedDict будет:

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

class Config(TypedDict):
a: str
b: int

def inference(name, **config: Unpack[Config]):
c = config['a']+str(config["b"])

config: Config = {"a": "1", "b": 2}
inference("example", **config)  # or I could get argument hinting for each one from Config
Однако мне было бы очень интересно, если бы я мог каким-то образом распаковать эти ключи, чтобы они вели себя так, как будто они были непосредственно введены как переменные в сигнатуру функции:

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

def inference(name, **?: Unpack[Config]):
c = a+str(b)
чтобы имитировать этот явный подход:

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

def inference(name, a: str, b: int):
c = a + str(b)
Моей мотивацией является то, что я хочу оставить код незагроможденным с помощью доступа к полям или ключам (

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

verbose_name.another_verbose_name
или verbose_name["another_verbose_name"], где последний не имеет подсказки типа в VSC). Кроме того, таким образом я мог бы определить TypedDict для Config один раз, а когда мне понадобится какой-то новый параметр для моего вывода, я мог бы просто добавить его в определение Config, не меняя подпись вывода.
В настоящее время мой обходной путь – явное определение аргументов в подписи вывода и по-прежнему вызов этого с помощью вывода (name, **config) . Я по-прежнему предпочитаю этот подход больше, чем Dataclass, так как я могу пропустить asdict(dataclass_config), делая это, что кажется совершенно ненужным, особенно при загрузке конфигурации из yaml или аналогичного...
Может быть, мой Подход неправильный и не соответствует лучшим практикам... Также был бы рад вашему мнению по этому поводу. Я только начинаю использовать более сложные темы Python...
Я могу себе представить, что добавление этой функциональности через PEP потребует большего, чем просто ввод текста, поэтому я хотел бы знать, есть ли какие-то общие установленное решение.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -arguments
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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