Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PyDev/Eclipse/Python未显示类的所有方法_Python_Eclipse_Ide_Pydev - Fatal编程技术网

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

PyDev/Eclipse/Python未显示类的所有方法,python,eclipse,ide,pydev,Python,Eclipse,Ide,Pydev,使用PyDev运行Eclipse(Galileo)。我正在尝试使用模块urllib2,我刚刚开始尝试使用它。我正在学习的一个教程说,在我的urllib2.urlopen()类上调用geturl()。我就这么做了,它果然起了作用 然而,当我尝试使用Eclipses便捷的“ctrl+space”快捷方式浏览类方法时,我感到惊讶,因为它只为我认为是基类的对象提供了私有方法: 当我使用dir(page)时,我可以使用各种简洁的方法 ['__doc__', '__init__', '__iter__',

使用PyDev运行Eclipse(Galileo)。我正在尝试使用模块urllib2,我刚刚开始尝试使用它。我正在学习的一个教程说,在我的urllib2.urlopen()类上调用geturl()。我就这么做了,它果然起了作用

然而,当我尝试使用Eclipses便捷的“ctrl+space”快捷方式浏览类方法时,我感到惊讶,因为它只为我认为是基类的对象提供了私有方法:

当我使用
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相同的功能;我相信它在我的工作电脑上工作,但我的家用电脑(我现在的那台)似乎“不正常”

我在Google/Stackoverflow上已经尽了最大的努力,但我不确定哪些关键字会返回结果来帮助我理解这里出了什么问题。你能提供的任何见解都将是伟大的

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

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

更新1:

回答“如果向下滚动,浏览器以什么结尾?”它以子类hook结尾。请参阅下面的照片,了解列表底部的外观(都是私有的,没有方法)

更新2:

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

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

wx
的自动完成功能运行得很好。也许我误解了在以前的帖子中告诉我的内容,但是,我理解,我之所以看到我的
页面
类的神奇方法,是因为PyDev不知道用什么填充它-所以它显然很混乱。我只是不确定接下来,我将继续阅读PyDev文档,看看是否能在这段时间内找到答案

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

更新3:

根据一些人关于PyDev中“强制内置”仅自动完成的评论,我在preferences下的强制内置中添加了“urllib2”


我有一些新方法…但不是我所期望的(即我没有看到我在调用
dir(page)
时从
\uu dict\uu
得到的方法,特别是geturl())。

这些方法大部分是Python的“神奇方法”:


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

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

IDE可以进行一些猜测,但当这些猜测失败时,你会得到与你所看到的一样的结果。它知道你有一个对象,因为一切都是一个对象,所以它会向你展示
对象的方法,如果你阅读:

需要注意的是,必须正确配置解释器才能使代码完成工作,并且为了获得内置代码,PyDev生成了一个shell,因此,如果防火墙阻止了eclipse与该shell的通信,那么防火墙可以阻止代码完成工作

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

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


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

只是一个旁注:并不是所有这些东西都是方法,例如,
code
fp
,更不用说
\uuuuuuuuu doc\uuuuuuu
\uuuuu模块\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,都是属性。但更严重的是:如果你在Eclipse中滚动列表,它是否以
\uuuuu repr\uuuuuuuuuuu
结尾?你?因为在IDLE中,我只从交互式会话中获得这些完成;在源代码编辑器中,如果我键入
页面。
并点击Tab,它将完成