EDIT:
Ваш класс 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
. Вы можете получить преимущества сейчас и получить больше информации в PyDev, изменив класс Person
на подкласс непосредственно с dict
.