Как ввести подсказку для параметра функции, который может быть одного из нескольких типов?

#python #type-hinting

#python #тип-подсказка

Вопрос:

Я добавляю подсказки типа в некоторый код python 2 и столкнулся с небольшой дилеммой. Как можно указать тип возврата функции, когда этот возврат может быть одним из нескольких типов?

Я работаю с функцией, которая выглядит следующим образом…

 def foo(param):
    # do stuff
    return dict_
  

где param строка и dict_ словарь с ключами, которые всегда являются строками, и значениями, которые могут быть либо целыми числами, либо строками.

Мое решение состояло в том, чтобы ввести подсказку для функции, как показано ниже, но я хотел проверить, что это правильная стратегия.

 def foo(param):
    # type: (str) -> Dict[str, object]
    # do stuff
    return dict_
  

Ответ №1:

Вам нужно объединение (также называемое типом суммы) Union[str,int] вместо более общего object :

 def foo(param):
    # type: (str) -> Dict[str,Union[str,int]]
    # ...
    return dict_
  

Используя object , вы заявляете, что значения словаря могут быть любого произвольного типа. Union[str,int] означает, что это может быть an int ; или это может быть a str ; но это не может быть a float , или a list , или другое dict , или что-либо другое, кроме int or str .

Комментарии:

1. Я никогда не видел, чтобы однострочные комментарии использовались подобным образом для указания типа.

2. Это рекомендуемый стиль для Python 2, в котором нет аннотаций функций.