Подтвердить что ты не робот

IntelliJ-IDEA Python тип проверки - неправильный ожидаемый тип?

В следующем коде:

from typing import List
def test() -> List[str]:
    ret = ["Hi", "Hi"]
    return ret

Я получаю следующее предупреждение в строке определения функции:

Expected type 'Integral", got 'str' instead

Я не вижу никакой причины, почему модуль Python IntelliJ-IDEA интерпретирует эту простую функцию как возвращающую список Integral, а не str. Это ошибка проверки типа?

4b9b3361

Ответ 1

У Pycharm есть только предварительная поддержка типов подсказок.

Ответ 2

Обратите внимание, что typing.List - это простой класс-оболочка, который расширяет встроенный list класс. Он помогает в типе намека и не позволяет создавать new список, используя сам.

Вот текущий код для typing.List:

class List(list, MutableSequence[T], extra=list):

    __slots__ = ()

    def __new__(cls, *args, **kwds):
        if _geqv(cls, List):
            raise TypeError("Type List cannot be instantiated; "
                            "use list() instead")
        return _generic_new(list, cls, *args, **kwds)

Выполняя typing.List[str], вы пытаетесь вызвать метод __getitem__ для объекта typing.List (который является типом). Также обратите внимание, что

Это означает, что:

typing.List.__getitem__(str)
# or
list.__getitem__(str)

Теперь, если вы видите, что ожидает метод индексации списка, он ожидает целое число, подобное a[0], a[1]. В этом случае вместо int, как 0, 1, он получил тип str

Надеюсь, это даст вам более целостное представление о typing.List.