Тип подсказки в Eclipse с PyDev

Я изучаю Python после много опыта работы с PHP, и было бы удобно иметь тип-намек в Python. Похоже, Eclipse с PyDev этого не поддерживает. Какие-либо предложения?

Например, я хочу, чтобы моя IDE отображала функции docstrings и типы , когда я ее использую, например:

def f(x: int) -> int: r"""Adds 3 to x""" return x + 3 f(# and now IDE shows everything about types 

  • Python: Typehints для объектов argparse.Namespace
  • В чем разница между типом и типом .__ new__ в python?
  • 5 Solutions collect form web for “Тип подсказки в Eclipse с PyDev”

    Python – динамически типизированный язык, где переменные типы не должны быть объявлены. Вы можете добавить информацию о ожидаемых типах, которые должны быть переданы функции в docstrings, хотя, например,

     def f(x): """ @x: int Adds 3 to x returns an int """ return x + 3 

    Но в этом случае функция настолько проста, что мне не нужна какая-либо информация о типе, и просто документирование того, что она делает, часто предпочитается в python за документирование строгих типов.

    pydev поддерживает докструмент (но не типы) и выполняет много ошибок, если вы открываете файлы python как часть проекта и не открываете их отдельно, перетаскивая их в Eclipse.

    Вам нужно добавить папки, содержащие файлы python, щелкнув правой кнопкой мыши по корню проекта, выбрав пункт меню « Properties и выбрав PyDev - PYTHONPATH в списке слева и выбрав « Add source folder для всех папок с файлами python. Обратите внимание, что pydev обычно может найти модули в любых подкаталогах, если в них есть __init__.py , поэтому вам часто нужно добавлять корневую исходную папку python.

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

    См. Также руководство pydev по адресу http://pydev.org/manual_101_root.html

    Присутствует Python 2/3

    Для локальных переменных области и функциональных параметров PyDev имеет следующее:

     assert isinstance(obj, MyClass) obj. # here hint will work 

    Хотя я думаю, что это не документированная функция. Вот официальная страница PyDev для подсказок типа и несколько выдержек, которые иллюстрируют синтаксис Sphinx.

     class Example: def param(self, a): ''':type a: MyClass''' def var(self, iterable): for a in iterable: #: :type a: AnotherClass pass 

    К сожалению, ни один из них не работает для членов класса.

    Так как PyDev 4 есть нечто похожее на PEP-484 (см. Ниже).

     class LatestExample: def listcase(self, param): ''':type param: list[str]''' def dictcase(self, param): ':type param: dict[str, MyClass]' 

    Будущий Python 3

    Взгляните на ответ @slushy. Без сомнения, это будущее. Но пока PyDev не поддерживает ни аннотации функций, ни PEP-3107 , ни новый материал PEP-484 @slushy. PEP-484 входит в Python 3.5 в некоторой ограниченной форме и в 3.6 в финале. Вот презентация BDFL PyCon 2015 для подсказок типов и PEP-484.

    По состоянию на август 2014 года есть предложение Гвидо Ван Россума использовать тип аннотации mypy- синтаксиса в определениях функций, заявляя, что новый синтаксис действительно действителен. Python 3. Пример из его предложения (еще не PEP по состоянию на сентябрь 2014 года)

     from typing import List, Dict def word_count(input: List[str]) -> Dict[str, int]: result = {} #type: Dict[str, int] for line in input: for word in line.split(): result[word] = result.get(word, 0) + 1 return result 

    Я не знаю о каких-либо способах ввода типов в Python.

    Стандартная практика Питонов такова:

     >>> def adds_three(number): ... '''Returns number + 3''' ... return number + 3 ... 

    Примечание. Я сделал следующее:

    • Имя функции ясно для ее поведения
    • Имя аргумента ясно, что это должно быть
    • Докшрин подробно описывает, что делает функция
    • Python – динамически типизированный язык. Зачем ограничивать пользователя целым? Плавающие точки также поддерживают оператор + . Пусть они используют его.

    Одна хорошая вещь о динамической типизации заключается в том, что все методы наследуются перегруженными. Конечно, вы всегда можете выполнять проверку типов в функции, чтобы предотвратить фатальные ошибки.

    аннотации reStructuredText , epytext и python3 могут определять ожидаемые типы в коде Python и поддерживаются различными интегрированными средами разработки, такими как pycharm . Это особенно удобно для определения имен классов, так как позволяет автозаполнение элементов.

    Простой пример в epytext:

     def x_intercept(m, b): """ Return the x intercept of the line M{y=m*x+b}. The X{x intercept} of a line is the point at which it crosses the x axis (M{y=0}). @type m: float @param m: The slope of the line. @type b: number @param b: The y intercept of the line. The X{y intercept} of a line is the point at which it crosses the y axis (M{x=0}). @rtype: number @return: the x intercept of the line M{y=m*x+b}. """ return -b/m 
    Python - лучший язык программирования в мире.