Автозаполнение для типов, которые могут быть динамически любыми — не работает

#python #visual-studio-code #intellisense

#python #visual-studio-code #intellisense

Вопрос:

У меня есть автозаполнение для Python с установленными расширениями Python и IntelliSense .

Я установил пакет matplotlib , и завершение работает для этого

 import matplotlib.pyplot as plt

fig = plt. #figure() shows in completion menu
  

но когда я пытаюсь это

 fig = plt.figure()

fig. # no completion menu. Specifically looking for suptitle()
  

[РЕДАКТИРОВАТЬ] Похоже, что это на самом деле связано с динамичностью Python. Например, указание на тип приводит к завершению

 fig = plt.figure()
assert isinstance(fig, figure.Figure)
fig. # now completes perfectly
  

Ответ №1:

Как правило, автоматическое завершение сильно зависит от информации о типе.

Причина IDE не сообщает вам, какой метод или поле данных у него есть, заключается в том, что:

  1. Если тип не может быть получен во время компиляции (или «перед выполнением»), IDE не знает, что это такое.

  2. На самом деле IDE может выполнять автоматическое завершение, если она сканирует все возможные пути, но это не имеет смысла, производительность будет очень низкой.

После python 3.5 мы можем указать тип возвращаемого метода. Если matplotlib добавит подсказку о типе, IDE может поддерживать автоматическое завершение.

Кстати, причина, по которой IDE необходимо индексировать файл при первой загрузке проекта, заключается в том, что ей необходимо проанализировать исходный код и получить информацию о типе.