我在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时,这有助于我进行大量的开发。我只是使用内容辅助来解决问题。
答案 0 :(得分:2)
不确定PyDev开发团队以外的任何人是否可以真正帮助您,因为这基本上归结为功能问题/请求。
我建议在Feature Request tracker或bug 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
模块一起完全删除。您现在可以获得好处,并通过直接从Person
将dict
类更改为子类,在PyDev中获得更好的信息。