Хитрое завершение кода с помощью PyDev, как с PDT?

StackOverflow https://stackoverflow.com/questions/2016269

  •  19-09-2019
  •  | 
  •  

Вопрос

Есть ли способ помочь завершению кода PyDev, сообщив ему тип переменной?

С помощью PDT вы можете использовать синтаксис, подобный PHPDoc, для этой цели:

/* @var $my_var MyClass */
$my_var = myFunction();
// PDT is able to figure out that $my_var is a MyClass object.

Но до сих пор я не могу понять, как сделать то же самое в python.

Это было полезно?

Решение

Нет (см. Документы).Похоже, что PyDev выполняет завершение импортированных данных и языковых ключевых слов.

Хотя не похоже, что об этом будет много говорить.Рассматриваемая переменная, похоже, была бы неизвестна pydev только в том случае, если бы она была передана в качестве аргумента функции без значения по умолчанию.И, если у вас есть функция, работающая в вашем собственном классе, похоже, что она должна быть членом класса (так что автозаполнение уже сработало бы).

Другие советы

Трюк с утверждением, похоже, не работает у меня с PyDev 2.2.2 ;это все еще предполагается ?

Однако еще один трюк, который я попробовал, и эта работа заключается в следующем :

class Foo(object):
    def __init__(self, bar):
       self.bar = bar
       # Tricking PyDev
       if (not self.bar):
          self.bar = Bar()
          raise Exception("Bar should not be null")

Во всех случаях это выглядит довольно банально, и мне бы хотелось иметь более чистый способ делать что-то (документацию, аннотации, что угодно).

На самом деле, вы можете, если выполните assert isinstance()

Например.:

a = function()
assert isinstance(a, MyClass)
a. <- would get the proper completions

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

Кроме того, это не должно иметь штрафных санкций во время выполнения, если вы используете python -O (который удалит утверждения)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top