4

クラスMap1、Map2、Map3、...のセットがすべてBaseMapから拡張されており、子Mapのインスタンスを取得するために何らかのリフレクションメカニズムを使用しているとします。これらのクラスのいずれかのインスタンスを動的に取得して変数mに格納し、pydevにタイプをBaseMapとして認識させて、単語補完を使用できるようにします。

1つの解決策は、コードを追加することです。

if False:
    m = BaseMap(0,0,0)

割り当て後m、使用する前に。if条件内の行は実行されませんmが、BaseMapタイプのオブジェクトであると宣言されています。

これはばかげているように見えるかもしれませんが、うまくいきました。それを行う他の方法はありますか?

4

2 に答える 2

6

assert isinstance(...)pydevで変数のオートコンプリートを取得するために使用できます。そうしないと、pydevは正しいタイプを推測できません。

コードを次のように言います。

m = getAttr(someThing, 'someAttr')
m.*no autocompletion*

pydevはタイプを知ることができmないため、オートコンプリートは表示されません。

試す:

m = getAttr(someThing, 'someAttr')
assert isinstance(m, BaseMap) # or whatever class it is
m.*pydev shows autocompletion*

ややハッキーですが、機能します(また、害はありません)。

于 2012-09-12T06:50:23.640 に答える
0

この質問はこの投稿に似ています:Eclipsepydevの自動提案が機能しない場合があります

1つの良い答えがすでに提案されています(assertを使用)。別の解決策は、このリンクで説明されているコンストラクターを使用することです。

于 2012-09-13T15:35:42.087 に答える