关于PyDev内容助手的令人不安之处

0 投票
2 回答
756 浏览
提问于 2025-04-15 15:49

我在Python里创建了一个简单的类,代码如下:

from UserDict import UserDict

class Person(UserDict):
def __init__(self,personName=None):
    UserDict.__init__(self)
    self["name"]=personName

在另一个模块里,我试着创建一个Person类的对象,并打印它的docclass属性:

import Person
p = Person.Person("me")
print p.__doc__
print p.__class__

我觉得有点烦的是,当我在Eclipse里使用内容辅助功能时,docclass并没有出现在实例化对象的属性列表里:

这里有个图片链接 http://img171.imageshack.us/img171/5169/pydevcontentassist.png

为什么会这样呢?在Java中,Eclipse会显示完整的属性和方法列表,这在开发时对我帮助很大,有时候我不想去查Java文档,只想通过内容辅助功能来搞定事情。

2 个回答

1

我不太确定除了PyDev开发团队的成员之外,还有谁能真正帮助你,因为这基本上是一个关于功能的问题或请求。

我建议你在他们的功能请求追踪器或者错误追踪器上创建一个项目。

1

编辑:

你的类 Person 是一种旧式类,因为它是从 UserDict 这个旧式类派生出来的。旧式类和新式类(也就是那些从 object 派生的类)在一些特殊属性的可用性和处理方式上有根本的区别。特别是,旧式类的实例用 dir() 函数查看时,不会返回 __class__,而新式类的实例则会返回这个属性,毫无疑问,PyDev 正在显示 dir() 的结果:

>>> class OldStyle: pass
... 
>>> os = OldStyle(); os.__class__; dir(os)
<class __main__.OldStyle at 0x100412cb0>
['__doc__', '__module__']
>>> class NewStyle(object): pass
... 
>>> ns = NewStyle(); ns.__class__; dir(ns)
<class '__main__.NewStyle'>
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

根据最近的 Python 标准库文档,由于在 Python 2.2 中引入了新式类,UserDict 的需求基本上已经消失了,现在可以直接从内置类型如 dict 进行派生。使用旧式类还有其他缺点,而这些在 Python 3 中已经完全被移除,包括 UserDict 模块。你现在可以通过将 Person 类直接从 dict 派生来获得这些好处,并在 PyDev 中获得更好的信息。

撰写回答