Что означает символ → (символ стрелки больше, чем стрелка) в сигнатуре метода Python?

В конце метода python есть символ -> или dash-more-than, и я не уверен, что это значит. Его можно назвать стрелкой.

Вот пример:

@property
def get_foo(self) -> Foo:
    return self._foo

где self._foo - это экземпляр Foo.

Я предполагаю, что это какое-то объявление статического типа, чтобы сообщить интерпретатору, что self._foo имеет тип Foo. Но когда я тестировал это, если self._foo не является экземпляром Foo, ничего необычного не происходит. Кроме того, если self._foo имеет тип, отличный от Foo, скажем, это был int, затем type(SomeClass.get_foo()) возвращает int. Итак, какая точка -> Foo?

Эта концепция трудно найти, потому что это символ без общего имени, а термин "стрелка" вводит в заблуждение.

Ответы

Ответ 1

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

Использовать случаи (из документации)

  • Предоставление ввода информации

    • Проверка типов
    • Пусть IDE показывают, какие типы функция ожидает и возвращает
    • Перегрузка функций/общие функции
    • Мосты на иностранных языках
    • Адаптация
    • Предикатные логические функции
    • Отображение запросов базы данных
    • Маршрутизация параметров RPC
  • Другая информация

    • Документация для параметров и возвращаемых значений

Из python-3.5 его можно использовать для Тип подсказок