【发布时间】:2012-11-25 04:27:16
【问题描述】:
使用 PyDev 运行 Eclipse (Galileo)。我正在尝试使用模块 urllib2 并且我 刚刚 开始尝试使用它。我正在阅读的教程之一说在我的 urllib2.urlopen() 类上调用 geturl() 。所以我做到了,它按预期工作。
但是,当我尝试使用 Eclipse 的便捷“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:
回答“如果我向下滚动浏览器会以什么结尾?”它以 subclasshook 结尾。请参阅下面的照片,了解列表底部的外观(都是私有的,没有方法)。
更新 2:
正如上一篇文章所建议的那样,我进入首选项菜单并检查了自动完成选项卡和解释器首选项选项卡,似乎没有什么不合适的(但是,在阅读了 pydev 自动完成文档之后,我什么也没看到关于“防火墙”或任何表明存在防火墙的迹象。
不过,我又做了一次测试,见下图:
wx 的自动完成功能运行良好。也许我误解了在以前的帖子中告诉我的内容,但是,我理解我看到 page 类的魔法方法的原因是因为 PyDev 不知道还有什么可以填充它 - 所以它显然很困惑.我只是不确定从这里去哪里。我会继续阅读 PyDev 文档,看看我是否能在此期间弄清楚。
而且,我差点忘记了——当我将鼠标“悬停”在代码中的 urllib2.urlopen() 上时,它确实向我显示了文档字符串。不确定这是否提供了有关此假定损坏功能的任何见解。
更新3:
根据某人关于“强制内置”仅在 PyDev 中自动完成的评论,我在偏好设置下将“urllib2”添加到强制内置。下面是我得到的图像......
我有一些新方法...但不是我预期的方法(即,当我调用 dir(page) 时,我没有看到从 __dict__ 获得的方法,特别是 geturl())。
【问题讨论】:
-
附注:并非所有这些都是方法——例如,
code和fp,更不用说__doc__和__module__,都是属性。但更严重的是:如果您在 Eclipse 中滚动列表,它是否以__repr__结尾? -
另外,您是在向我们展示交互式解释器还是文件编辑器?因为在 IDLE 中,我只能从交互式会话中获得这些完成;在源代码编辑器中,如果我输入
page.并点击 Tab,它将完成当前交互会话中的任何page,而不是我在源代码中定义的任何内容。 -
啊,谢谢你的纠正,我只是假设它们都是方法。我对您关于“它以什么结尾”的问题添加了更新。
-
我相信我在源代码编辑器中执行此操作...我没有像在 IDLE 中那样的“交互式解释器”设置...嗯,我担心我描述这个错误并使用错误的词汇...我在顶部有一个编辑器窗口 - 我的源代码在哪里(这是一个标准的 pydev 透视图),在下面我有一个“标签”,上面写着 Console,在那个窗口中,是我所有的 Python 输出。在顶部的窗口中观察到我的错误 - 我称之为源窗口。这有意义吗=/?
-
这不是你的问题,但我认为你对“方法”这个词有点困惑。您会看到很多方法(例如,
__ne__和__reduce__),并且您错过了很多不是方法的东西(例如,code和fp)。您所看到的还包括很多在dir中但不在__dict__中的东西,以及来自基类的东西。我认为更好的方式来描述您所看到的和未看到的内容是您只看到魔术方法(标准和非标准),即用两个下划线包围的方法。