python 3: вывод типа с помощью mypy? - PullRequest
0 голосов
/ 25 апреля 2018

Учитывая следующий фрагмент в python 3

def foo() -> List[X]: pass

class X:
    def bar(self) -> MYTYPE: pass

для следующего выражения:

[x.bar() for x in foo()]

Могу ли я использовать пакет mypy для правильного анализаAST из приведенного выше выражения и угадайте тип результата: List[MYTYPE]?

Если не можете, какой мой лучший выбор?какие-либо идеи / пакеты, чтобы рекомендовать?

1 Ответ

0 голосов
/ 25 апреля 2018

Да, это будет выводить это. Вот демо:

from typing import List

class MyType:
    pass

class X:
    def bar(self) -> MyType: pass

def foo() -> List[X]: pass  # note the square brackets

bars = [x.bar() for x in foo()]
reveal_type(bars)

Тогда, когда вы запустите mypy script.py в терминале, вы увидите сообщение:

Revealed type is 'builtins.list[script.MyType*]'

Документация о reveal_type здесь .

Кстати, с вашим кодом возникла небольшая проблема, она должна быть List[X], а не List(X).

PyCharm также распознает типы. bars. даст опции автозаполнения для методов списка, а bars[0]. даст опции для MyType.

...