Дополнение кода Pydev для всего - PullRequest
22 голосов
/ 02 июня 2011

Во многих случаях (например, параметры функции) Pydev статически не знает тип переменной.Поэтому завершение кода (после . или при использовании ctrl+space) не работает.

В большинстве случаев вы знаете , какой тип будет во время выполнения при разработкепрограммное обеспечениеЕсть ли способ подсказать Pydev, чтобы код завершал его правильно?

Я полагаю, для этого может потребоваться определенная функция Pydev или, возможно, даже новый Python PIP.общая проблема со всеми динамическими языками ...

ОБНОВЛЕНИЕ:
Возможно, имеется пример для разъяснения:

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

Я не поддерживаю этот конкретный метод - это просто пример системы, которую может работа.Опять же, конечно, это не должно быть обязательным, но иногда раздражает отсутствие возможности подсказки типа.

Ответы [ 4 ]

22 голосов
/ 22 августа 2011

[Изменить]

Начиная с PyDev 2.8.0, он может использовать строки документов и комментарии для определения типа объектов.

Подробнее о поддерживаемых форматах см. http://pydev.org/manual_adv_type_hints.html.

[До PyDev 2.8.0]

Ранее он поддерживал только вызовы assert isinstance (и это все еще работает):

assert isinstance(a_list, list)

PyDev сможет распознать его и правильно предоставить для него завершение кода (обратите внимание, что позже вы можете запускать Python без утверждений, если обнаружите, что он замедляет ваш код: Что делает оптимизация Python (-O или PYTHONOPTIMIZE) делать? )

5 голосов
/ 16 сентября 2013

Начиная с PyDev 2.8.0 можно использовать комментарии Sphinx или Epydoc для завершения кода: http://pydev.org/manual_adv_type_hints.html

1 голос
/ 21 августа 2012

Если вы используете PyCharm , вы можете выбрать стиль строки epydoc или sphinx и указать типы параметров и возвращаемых значений функции в соответствии с этим стилем ( дальнейшее обсуждение )

0 голосов
/ 14 ноября 2012

Что я обычно делаю, чтобы обойти это.

def func(my_list_param):
    my_list_param = []
    my_list_param.appe # at this stage I would get code completion.

Просто не забудьте удалить инициализацию переменной при тестировании или фиксации. Да, и кстати, ответ, помеченный как ответ, кажется, не работает для меня.

...