Каков тип подсказки для (любого) модуля Python? - PullRequest
0 голосов
/ 14 декабря 2018

Я хотел бы добавить подсказку типа (Python3) для модуля (класс 'module').Пакет typing не предоставляет его, а types.ModuleType() - это конструктор, который возвращает объект модуля для определенного имени.

Пример:

import types
def foo(module: types.ModuleType):
   pass

по крайней мере в результатах PyCharmв "Не удается найти ссылку ModuleType в types.pyi".

1 Ответ

0 голосов
/ 14 декабря 2018

и types.ModuleType () является конструктором.

Это не имеет значения.types.ModuleType по-прежнему является ссылкой на тип, как и str и int.Нет необходимости в универсальной аннотации Module[typehint], поэтому types.ModuleType - это именно то, что вам нужно здесь использовать.

Например, официальный Python типизированный проект предоставляет подсказку типа для sys.modules как:

from types import FrameType, ModuleType, TracebackType

# ...

modules: Dict[str, ModuleType]

Не смущайтесь здесь из-за названия;types.ModuleType является ссылкой на тип модуля.Это не отдельная фабричная функция или что-то в этом роде.Имя CamelCase соответствует соглашению этого модуля, и вы используете эту ссылку, потому что объект типа иначе не доступен как встроенный.Модуль types присваивает значение type(sys) имени .

Если у PyCharm возникают проблемы с поиском заглушек types.ModuleType, то это либо проблема с самим PyCharm (ошибка), или связанные в настоящее время заглушки устарели, или вы использовали неполный набор заглушек с типизированным типом.См. Документацию PyCharm по , как использовать пользовательские заглушки для предоставления нового набора.

Если это не сработает, это может быть ошибка в PyCharm, связанная с понятием экспорт подсказок типа .Typeshed в настоящее время определяет подсказки типа ModuleType в отдельном модуле , которые затем импортируются в types.pyi stubfile с использованием синтаксиса from module import name as name. PEP 484 указывает, что импортированные подсказки типов не являются частью заглушки , если не используется синтаксис as:

Модули и переменные, импортированные в заглушкуне считаются экспортированными из заглушки, если при импорте не используется форма import ... as ... или эквивалентная форма from ... import ... as ....

Возможно, PyCharm еще неправильно обрабатывает такие случаи.

...