Хитрое завершение кода с помощью PyDev, как с PDT?
-
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 (который удалит утверждения)