0

次のようにPythonで簡単なクラスを作成しました。

from UserDict import UserDict

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

別のモジュールでは、Personクラスのオブジェクトをインスタンス化し、そのドキュメントクラスの属性を出力しようとしています。

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

Eclipseでコンテンツアシストを使用するときに、ドキュメントクラスがインスタンス化されたオブジェクトの属性のリストに含まれていないと考えるのは気になります。

代替テキストhttp://img171.imageshack.us/img171/5169/pydevcontentassist.png

なぜこれが起こるのですか?Javaでは、Eclipseは属性とメソッドの完全なリストを表示します。これは、Javaドキュメントを見たくないときに開発で大いに役立ちます。コンテンツアシストを使用して物事を理解するだけです。

4

2 に答える 2

1

PyDev開発チームの外部の誰かがここで本当にあなたを助けることができるかどうかはわかりません。これは基本的に機能の質問/要求に要約されるからです。

機能リクエストトラッカーまたはバグトラッカーでアイテムを作成することをお勧めします。

于 2009-11-09T17:31:17.650 に答える
1

編集:

クラス Person は、古いスタイルのクラスからサブクラス化されているため、いわゆる古いUserDictスタイルのクラスです。古いスタイルと新しいスタイル (つまり、 からサブクラス化されたクラスobject) の間には、特別な属性の可用性と処理に根本的な違いがあります。特に、dir()古いスタイルのクラスのインスタンスは を返さない__class__のに対しdir()、新しいスタイルのクラスのインスタンスは返しており、間違いなくPyDevdir() の結果を表示しています。

>>> 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 標準ライブラリのドキュメントで説明されているように、Python 2.2 での新しいスタイルのクラスの導入により、 のような組み込み型から直接サブクラス化できるようになったため、 の必要性UserDictは大幅になくなりました。古いスタイルのクラスを使用することには他にも欠点があり、それらはモジュールとともに Python 3 で完全に削除されました。から直接クラスをサブクラスに変更することで、今すぐ利点を得ることができ、PyDev でより良い情報を得ることができます。dictUserDictPersondict

于 2009-11-09T19:10:50.127 に答える