0

我在 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 文档时,这对我的开发很有帮助。我只是使用内容辅助来解决问题。

4

2 回答 2

1

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

我建议在他们的Feature Request tracker或他们的bug tracker上创建一个项目。

于 2009-11-09T17:31:17.650 回答
1

编辑:

您的类 Person 是所谓的旧式类,因为它是该类的子UserDict类,一个旧式类。旧式和新式(即从 子类化的类object)在特殊属性的可用性和处理方面存在根本区别。特别是,dir()旧式类的实例不返回__class__,而dir()新式类的实例确实返回,而且毫无疑问,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 标准库文档中所描述的那样UserDict,随着Python 2.2 中新型类的引入,现在对dict. 使用旧式类还有其他缺点,它们已在 Python 3 中与UserDict模块一起完全删除。现在,您可以通过将Person类直接从dict.

于 2009-11-09T19:10:50.127 回答