Что-то тревожное в ассистенте контента PyDev - PullRequest
0 голосов
/ 09 ноября 2009

Я создал простой класс в 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__

Меня беспокоит, что doc и class отсутствуют в списке атрибутов экземпляра объекта, когда я использую помощник по содержимому в Eclipse:

альтернативный текст http://img171.imageshack.us/img171/5169/pydevcontentassist.png

Почему это происходит? В Java Eclipse показывает полный список атрибутов и методов, и это иногда помогает мне в разработке, когда я не хочу смотреть на Java Docs. Я просто разбираюсь с помощью контента.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2009

Не уверен, что кто-то из команды разработчиков PyDev действительно может вам здесь помочь, поскольку это сводится к вопросу / запросу о функции.

Я бы предложил создать элемент на их трекере запросов функций или на трекере ошибок .

1 голос
/ 09 ноября 2009

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.

...