在Eclipse中使用PyDev进行类型提示

21 投票
5 回答
14462 浏览
提问于 2025-04-15 21:58

我正在学习Python,之前有很多PHP的经验,想在Python中使用类型提示,这样会方便很多。看起来Eclipse加上PyDev不支持这个功能。有没有什么建议呢?

举个例子,我希望我的开发环境在我使用函数的时候,能显示函数的文档字符串类型,像这样:

def f(x: int) -> int:
    r"""Adds 3 to x"""
    return x + 3

f(# and now IDE shows everything about types 

5 个回答

9

截至2014年8月,Guido Van Rossum提出了一个建议,想要在函数定义中使用mypy的语法来标注类型。他表示这种新语法实际上是有效的Python 3代码。以下是他提议中的一个例子(截至2014年9月,这还不是正式的PEP)。

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
14

未来的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,也不支持@slushy展示的新PEP-484内容。PEP-484将在Python 3.5中以某种有限的形式出现,而在3.6中则会最终实现。这里是BDFL的PyCon 2015演讲,讲的是类型提示和PEP-484。

13

Python是一种动态类型的编程语言,这意味着你在使用变量时不需要提前声明它的类型。不过,你可以在函数的文档字符串里添加一些关于预期传入类型的信息,比如:

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

不过在这种情况下,我觉得这个函数非常简单,不需要任何类型信息。通常在Python中,记录函数的功能比记录严格的类型更受欢迎。

pydev支持文档字符串的补全(但不支持类型的补全),并且能够捕捉到很多错误,只要你是把Python文件作为项目的一部分打开,而不是单独拖放到Eclipse中打开。

你需要通过右键点击项目根目录,选择Properties菜单项,然后在左侧列表中选择PyDev - PYTHONPATH,接着点击Add source folder来添加所有包含Python文件的文件夹。需要注意的是,如果子目录里有一个__init__.py文件,pydev通常可以找到这些模块,所以你通常只需要添加根Python源文件夹。

之后,你可以通过在输入(之前按ctrl+space来访问工具提示,并在输入(之后按ctrl+space来自动填充建议的函数参数。

更多信息请查看pydev手册,链接在这里:http://pydev.org/manual_101_root.html

撰写回答