Ответ 1
Я думаю, что i
в .pyi
означает "Интерфейс"
Определение для интерфейса в Java:
Интерфейс в языке программирования Java - это абстрактный тип, который используется для определения поведения, которое должны реализовывать классы.
- Из Python репозиторий github:
Каждый модуль Python представлен "заглушкой"
.pyi
. Это обычный файл Python (т.е. Он может интерпретироваться Python 3), за исключением того, что все методы пусты.
- В репозитории "Mypy" они явно упоминают "заглушки" как общедоступные интерфейсы:
Файл-заглушка содержит только описание открытого интерфейса модуля без каких-либо реализаций.
Поскольку "Интерфейсы" не существуют в Python (см. Этот вопрос SO между классом Abstract и Interface), я думаю, дизайнеры намеревались выделить для него специальное расширение.
pyi
реализует файл-заглушку (определение от Мартина Фаулера)
Заглушки: предоставляют постоянные ответы на вызовы, сделанные во время теста, обычно вообще не отвечая ни на что, кроме того, что запрограммировано для теста.
Но люди лучше знакомы с интерфейсами, чем с "заглушками", поэтому было проще выбрать .pyi
, чем .pys
чтобы избежать ненужной путаницы.