有关PyDev内容帮助的令人不安的事情

时间:2009-11-09 16:45:10

标签: python eclipse pydev

我在Python中创建了一个简单的类,如下所示,

from UserDict import UserDict

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

在另一个模块中,我尝试实例化Person类的对象并打印其 doc class 属性:

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

当我在Eclipse中使用内容辅助时,认为 doc class 不在实例化对象的属性列表中让我感到困扰:

alt text http://img171.imageshack.us/img171/5169/pydevcontentassist.png

为什么会这样?在Java中,Eclipse显示了完整的属性和方法列表,当我不想查看Java Docs时,这有助于我进行大量的开发。我只是使用内容辅助来解决问题。

2 个答案:

答案 0 :(得分:2)

不确定PyDev开发团队以外的任何人是否可以真正帮助您,因为这基本上归结为功能问题/请求。

我建议在Feature Request trackerbug tracker上创建一个项目。

答案 1 :(得分:1)

编辑:

你的类Person是一个所谓的旧式类,因为它是UserDict类的子类,一个旧式的类。在特殊属性的可用性和处理中,旧式和新式(即从object子类化的类)之间存在根本区别。特别是,旧式类的实例的dir()不会返回__class__,而新式类实例的dir()会返回PyDev,毫无疑问,>>> 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__'] 是显示dir()的结果:

UserDict

正如最近的Python Standard Library documentation所述,对dict的需求已基本消失,因为使用introduction of new-style classes in Python 2.2,现在可以直接从内置类型(如{{}继承子类。 1}}。使用旧式类还有其他缺点,它们已经在Python 3中与UserDict模块一起完全删除。您现在可以获得好处,并通过直接从Persondict类更改为子类,在PyDev中获得更好的信息。