2012-04-17 5 views
-1

Предположим, у меня есть такая функция:Python documentator, IDE направляющие

def render(someobject): 
someobject. #here i expect IDE to know which class it is and autocompletion and other IDE functional will be available 
dorender() 

В моем случае IDE не имеет возможности узнать, что происходит там. Как я могу сказать, используя комментарии?

В случае PHP я использовал что-то вроде этого

/** 
* @param MyClass myobject 
**/ 
function render($myobject){ 
    //by typing $myobject-> IDE already knows, that it should use $myobject as MyClass objec 
    dorender() 
} 

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

В PHP при использовании PhpStorm я бы сделать следующее:

$myobject=some_proxy() 
/** 
* @var $my_object MyClass 
**/ 
// in following code IDE will use $myobject as MyClass 

Как я могу достигнуть такое же поведение с PyCharm specificaly и питона documentators в общем?

+0

Нашли ответ, здесь, в stackoverflow: D Именно то, что мне нужно. http://stackoverflow.com/questions/6318814/how-can-i-tell-pycharm-what-type-a-parameter-is-expected-to-be – Tigra

ответ

1

Используйте docstring:

def render(someobject): 
    """ This methods renders some object. """ 
    dorender() 

Более подробную информацию можно найти здесь http://en.wikipedia.org/wiki/Docstring#Python

Вы можете использовать самоанализ, чтобы узнать о методы объекта, атрибуты и т.д.:

dir(object) 
help(object) 

Автоматическое завершение и интеграция IDE, основанная на интроспекции, возможна, есть еще подробную информацию можно найти на сайте Python.org: http://wiki.python.org/moin/IntegratedDevelopmentEnvironments

Чтобы узнать, что someobject, вы можете использовать type или isinstance см следующий псевдокод:

type(someobject) 
if isinstance(someobject, ClassA): 
    print "someobject is a ClassA variable" 
+0

Но опять же, это совет только для меня. IDE все еще не знает, какой тип объекта он есть. Например, я хочу сделать (внутри функции) некоторый объект. (Начните вводить текст, захотите увидеть соответствующие методы). – Tigra

+0

Интеграция IDE с автоматическим завершением кода зависит от вашей среды разработки, см. Мой обновленный ответ об этом. – cfedermann

+0

И agian, help, dir - Только для меня. Это не позволяет интроспекции для IDE. Пожалуйста, внимательно прочитайте вопрос.Я знаю о docsrting, но, возможно, мне не хватает точки, но я не вижу способа указать IDE (не для себя и для doc-builders, которые используют docstring), к какому классу принадлежит некоторый объект. Поэтому я мог бы сделать рефакторинг позже, чтобы использовать «найти обычаи», использовать автозаполнение. Все, что можно сделать, только когда MyClass явно указан – Tigra

0

Я не уверен, если он будет работать в PyCharm (я его не использую), но для Python 3 function annotations.

Вы можете поместить те, в определение функции:

def render(someobject :ObjectClass): 
    dorender() 

Может PyCharm будет использовать это, чтобы определить, какие методы доступны на SomeObject.

EDIT:

После небольшого теста я предполагаю, что это должно работать (что является довольно удивительным).

+0

Спасибо, но он не работает с python 2.x. В PHP phpdoc работает стандарт, все IDE поддерживают его аннотации. phpstorm, netbeans, eclipse и многие другие. Похоже, что у python просто нет такого стандарта :( – Tigra

+0

По крайней мере, я не знаю ни одного соглашения в docstrings, в котором упоминаются объектные классы. Я предполагаю, что статические интерпретации аннотаций функции кода были добавлены в Python 3. – BergmannF

Смежные вопросы