Завершение кода Пидева для всего
Во многих случаях (например, функциональные параметры) Pydev не статически знает тип переменной. Поэтому завершение кода (после .
или при использовании ctrl+space
) не работает.
В большинстве случаев вы знаете, какой тип будет во время выполнения при разработке программного обеспечения. Есть ли способ намекнуть Pydev на правильное заполнение кода?
Я предполагаю, что для этого может потребоваться конкретная функция Pydev или, возможно, даже новый PIP-код Python.
На самом деле это типичная проблема со всеми динамическими языками...
UPDATE:
Возможно, для разъяснения есть пример:
def some_func(a_list, an_object):
a_list.app # Here I would not get code completion for append
Пример того, что могло бы работать, если бы Pydev (или PIP) поддержал бы его:
from someobj import SomeObject
def some_func(a_list, an_object):
# typecast: a_list=list
# typecast: an_object=SomeObject
a_list.app # Now code completion would show append
Я не одобряю этот конкретный метод - это просто пример системы, которая могла бы работать. Опять же, конечно, это не должно быть обязательным, но иногда отсутствие возможности намекать на тип раздражает.
Ответы
Ответ 1
[изменить]
Начиная с PyDev 2.8.0, он может использовать docstrings и комментарии для обнаружения типа объектов.
Подробнее о поддерживаемых форматах см. http://pydev.org/manual_adv_type_hints.html.
[До PyDev 2.8.0]
Ранее он поддерживал только assert isinstance calls (и это все еще работает):
assert isinstance(a_list, list)
PyDev сможет распознать его и правильно предоставить для него завершение кода (обратите внимание, что позже вы можете запустить Python без утверждений, если вы обнаружите, что он делает ваш код медленнее: Что оптимизирует ли Python (-O или PYTHONOPTIMIZE)?)
Ответ 2
В PyDev 2.8.0 могут использоваться комментарии Sphinx или Epydoc для завершения кода:
http://pydev.org/manual_adv_type_hints.html
Ответ 3
Если вы используете PyCharm, вы можете выбрать стиль epydoc или sphinx docstring и указать типы параметров и возвращаемые значения функции в соответствии с этим стиль (дальнейшая дискуссия)
Ответ 4
Что я обычно делаю, чтобы обойти это.
def func(my_list_param):
my_list_param = []
my_list_param.appe # at this stage I would get code completion.
Не забудьте удалить инициализацию переменной при тестировании или фиксации.
Ох и кстати, ответ, отмеченный как ответ, кажется, не работает для меня.
Ответ 5
Если вы используете Python> = 3.5 в своем коде, вы можете указать тип параметров в объявлениях функций (26.1. Набор текста - поддержка подсказок типов), поэтому вы можете написать код:
from someobj import SomeObject
def some_func(a_list: list, an_object: SomeObject):
a_list.app # Code completion works
an_object.a_method() # Code completion works
Этот тип синтаксиса не влияет на выполнение и не проверяет реальный тип, переданный функции, но делает ваш код более читабельным и делает работу по завершению кода.