и 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 еще неправильно обрабатывает такие случаи.