Автоматически генерировать аннотации типа Python? - PullRequest
0 голосов
/ 18 мая 2018

Я модифицирую старый код Python, чтобы добавить аннотации PyType.Я делаю это механически, добавляя операторы печати в начало каждой функции

def f(a, b):
    print("type a:", type(a))
    print("type b:", type(b))

и обновляя соответственно.

Есть ли что-нибудь, что может помочь автоматизировать этот процесс?

1 Ответ

0 голосов
/ 18 мая 2018

Конечно, есть некоторые проекты, которые могут помочь.

  • Instagram разработал инструмент MonkeyType для сбора информации о типах во время выполнения.Они выводятся в виде файлов-заглушек, но вы можете использовать включенные инструменты, чтобы применять их к исходным файлам в качестве встроенных аннотаций, или использовать retype проект , чтобы сделать то же самое.
  • Dropboxимеет аналогичный инструмент под названием pyannotate;этот инструмент может генерировать комментарии или аннотации к подсказкам типа Python 2.

Ни один из проектов не даст совершенных подсказок типа;всегда принимайте их вывод за отправную точку, а не за официальные окончательные аннотации.Цитата MonkeyType readme:

С MonkeyType очень легко добавлять аннотации, которые отражают конкретные типы, которые вы используете во время выполнения, но эти аннотации могут не всегда соответствовать полной предполагаемой возможности функций.Например, add способен обрабатывать гораздо больше типов, чем просто целые числа.Точно так же MonkeyType может генерировать конкретную аннотацию List, где более подходящим будет абстрактный Sequence или Iterable.Аннотации MonkeyType - это информативный первый черновик, который должен быть проверен и исправлен разработчиком.

Но прочитайте пост инженерного блога Instagram на MonkeyType;он способствовал добавлению аннотаций типов в кодовую базу Instagram.

Отказ от ответственности : MonkeyType и retype - оба проекта, разработанные коллегами из Facebook.Я не имел никакого ввода в эти инструменты сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...