PyDev / Eclipse / Python没有显示类的所有方法

时间:2012-12-07 01:24:39

标签: python eclipse ide pydev

使用PyDev运行Eclipse(Galileo)。我正在尝试使用模块urllib2,而我只是开始尝试使用它。我正在阅读的其中一个教程说我在urllib2.urlopen()类上调用了geturl()。所以我做了,它按预期工作。

然而,当我尝试使用Eclipses handy-dandy“ctrl + space”快捷方式浏览类方法时,我感到很惊讶,它只给出了我认为是基类的私有方法:

enter image description here

当我做dir(page)时,我会得到各种可以玩的方法!

['__doc__', '__init__', '__iter__', '__module__', '__repr__', 'close', 'code', 'fileno', 'fp', 'getcode', 'geturl', 'headers', 'info', 'msg', 'next', 'read', 'readline', 'readlines', 'url']

这是一个Eclipse问题吗?或用户错误?如果我把它放在IDLE中,我可以使用IDLE的自动完成功能来查看可用的方法,但我无法使用与PyDev相同的功能;我相信它正在我的工作PC上工作,但我的家用电脑(我现在的那台电脑)似乎“不正常”。

我在Google / Stackoverflow上看起来尽我所能,但我不确定哪些关键字会返回可能有助于我了解这里出错的结果。你能提供的任何见解都会很棒!

(Python 2.6,在Debian(#!)虚拟环境中运行,windows7主机 - 如果有任何重要的话)

注意:我只是在Debian上开发,所以我在Win7上没有eclipse。

UPDATE1:

要回答:“如果我向下滚动,浏览器会以什么结束?”它以 subclasshook 结尾。请参阅下面的照片,了解列表底部的内容(全部是私有 ,没有方法)。

enter image description here

UPDATE2:

正如之前的帖子建议的那样,我进入了首选项菜单并检查了自动填充选项卡和解释器首选项选项卡,似乎没有任何不合适的地方(但是在阅读pydev自动完成文档之后,我再也没有看到任何内容)关于“防火墙”或任何有迹象的迹象。

但是,我做了另一项测试,见下图:

enter image description here

wx的自动完成功能运行正常。也许我误解了以前帖子中告诉我的内容,但是,我明白我看到page类的魔术方法的原因是因为PyDev不知道还有什么可以填充它 - 所以它是显然困惑。我只是不确定从哪里开始。我将继续阅读PyDev文档,看看我是否能在此期间弄明白。

而且,我差点忘了 - 当我在我的代码中将鼠标悬停在urllib2.urlopen()上时,确实显示了doc字符串。不确定这是否提供了关于这个假定的破坏功能的任何见解。

UPDATE3:

根据某些人关于“强迫建筑”的评论仅在PyDev中自动完成,我去了并在首选项下的强制内置添加了“urllib2”。以下是我得到的图像......

enter image description here

我有一些新的方法......但不是我预期的方法(即当我调用__dict__时,我没有看到dir(page)得到的那些,特别是geturl())。< / p>

3 个答案:

答案 0 :(得分:0)

其中大部分都是Python的“神奇方法”:

http://www.rafekettler.com/magicmethods.html

它们是您可以在任何对象上定义的特殊方法,以便为其提供自定义行为。大多数Python IDE都知道不会显示它们,但Eclipse特别有帮助。

答案 1 :(得分:0)

您遇到的问题是使用像Python这样的动态语言的基本问题:您的IDE无法知道page变量引用的对象类型。要做到这一点,它必须知道urlopen()返回什么类型。如果不称呼它就没有办法知道它!每次调用它时,它甚至可能不会返回相同的类型,在这种情况下,它应该向哪些类的方法显示?

IDE可以做出一些猜测,但是当这些猜测失败时,你会得到你所看到的结果。它知道你有一个对象,因为一切都是一个对象,所以它会显示object的方法。

答案 2 :(得分:0)

如果您阅读the documentation

  

重要的是要注意你的解释器必须正确配置才能使代码完成工作,并且为了获得内置函数,PyDev会生成一个shell,因此,如果阻塞了防火墙,那么拥有防火墙可能会阻止代码完成工作。从日食到那个壳的沟通。

换句话说,你必须进入首选项并设置“代码完成”设置和“解释器 - Python”设置,并确保Eclipse可以启动子shell并通过没有防火墙的套接字与它通信或其他任何阻碍。

我的猜测是,在那些事情中,你的翻译设置很可能是错误的。即使您的Python位于通常的/usr/bin/python位置,您也可以设置PyDev来查找,例如/usr/bin/python3python26,或者“不要猜测,始终使用#!line或特定于项目的设置“,或者您已经在每个用户位置而不是在系统范围内安装了Python,或者谁知道什么。

查看“Interpreter - Python”首选项页面中的内容,看看是否可以像Eclipse期望的那样运行Python。如果没有,它将无法执行任何命令行完成,除了内置的基本内容。(正如我在其他地方所说,我相信这意味着它可以猜测page属于某种类型,但它不知道什么类型,所以它会猜测几乎所有类对象都有的所有标准魔术方法,而不是别的。)