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

2024-06-16 22:13:44 发布

您现在位置:Python中文网/ 问答频道 /正文

运行galiledev的Eclipse(PyDev)。我正在尝试使用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']

这是日食问题吗?还是用户错误?如果我把它放在IDLE中,我可以使用IDLE的自动完成特性来查看有哪些方法可用,但是我无法使用PyDev获得相同的功能;我相信它可以在我的工作PC上工作,但是我的家用PC(我现在的那台)似乎“不正常”。在

我在Google/Stackoverflow上已经尽力了,但我不确定哪些关键字会返回结果,这可能有助于我理解这里出了什么问题。太好了!在

(Python2.6,运行在Debian(#!)虚拟环境,windows7主机-如果有任何问题)

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

更新1:

回答:“如果我向下滚动,浏览器的结尾是什么?”它以子类钩子结尾。请看下面的照片了解列表底部的样子(这都是私有的,没有方法)。在

enter image description here

更新2:

正如前一篇文章所建议的,我进入了preferences菜单,检查了autocompletion选项卡和interpreference选项卡,没有什么不合适的地方(但是,在阅读了pydev autocompletion文档之后,我没有看到任何关于“防火墙”的信息,也没有任何迹象表明存在防火墙。在

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

enter image description here

wx的自动完成功能工作正常。也许我误解了之前的文章告诉我的,但是,我理解我看到我的page类的魔术方法的原因是因为PyDev不知道用什么来填充它,所以它显然很混乱。我只是不知道该怎么办。我将继续阅读PyDev文档,看看是否可以在此期间找到答案。在

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

更新3:

根据一些人关于PyDev中“强制内置”只能自动完成的评论,我去把“urllib2”添加到preferences下的forced builtins中。下面是我得到的图像。。。在

enter image description here

我有一些新方法。。。但不是我所期望的(即当我调用__dict__时,我没有看到从__dict__得到的那些,特别是geturl())。在


Tags: 方法功能doc结尾文章pagedebianurllib2
3条回答

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

ide可以进行一些猜测,但是当这些猜测失败时,您将得到与您所看到的类似的结果。它知道你有一个对象,因为所有的东西都是一个对象,所以它显示了object的方法。在

如果您阅读the documentation

It's important to note that your interpreter must be properly configured for the code-completion to work, and for getting the builtins, PyDev spawns a shell, so, having a firewall can prevent the code-completion from working if it's blocking the communication from eclipse to that shell.

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

我的猜测是,在这些事情中,你的口译员设置最有可能是错误的。即使您的Python位于通常的/usr/bin/python位置,您也可以将PyDev设置为查找/usr/bin/python3,或{},或者“不要猜,总是使用#!行或特定于项目的设置”,或者您已经将Python安装在每个用户的位置而不是系统范围内,或者谁知道是什么。在

查看“解释器-Python”prefs页面中的内容,并查看是否可以按照Eclipse期望的方式运行Python。否则,除了内置的基本功能外,它将无法完成任何命令行。(正如我在其他地方说过的,我相信这意味着它可以猜测page是某个类类型,但它无法判断是什么类型,因此它将猜测几乎所有类对象都具有的标准magic方法,而没有其他方法。)

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

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

它们是一些特殊的方法,你可以在任何对象上定义它们,给它自定义的行为。大多数pythonide都知道不要显示它们,但是Eclipse特别有用。在

相关问题 更多 >