2009-11-05 8 views
7

私はPythonの開発のためにKomodo Editを使用しています。私は自動完成から最高のものを取りたいと思っています。Komodo Python自動完成:変数メタデータによる型推論?

私はこれを行う場合:

a = A() 
a. 

私はA.

のメンバーのリストを見ることができます。しかし、私はこれを行う場合:

a = [A()] 
b = a[0] 
b. 

それは動作しませんが。

a = [A()] 
b = a[0] 
"""b 

Type: A 
""" 
b. 

どのようにして、bがA型であることを自動補完することができますか?

答えて

8

これはあなたの質問に実際には答えませんが、Wing IDEを使用すると、assert isinstance(b, A)でタイプアナライザにヒントを与えることができます。 hereを参照してください。私はコモドでそれをする方法を見つけていない、明らかにそれはpossible PHPまたはJavaScriptを書くときだ。

更新

私はこれを行うにコモドを騙しする方法を見つけた:

if 0: b=A() 

これは動作します(少なくともコモド5.2上)と副作用を持たないが、確かですコードを読んだ人を混乱させる。

+1

何が恐ろしいハックなのですか?私はあなたがそれを最初に見つけたことだけを嫉妬しています:)もし私がまだいなければ+1します。 –

+0

私はWing IDEに変更するつもりだと思います。 assert isinstance(b、A)構文はうまく動作します。 –

+0

私はEmacs 24 + Jediの設定でもうまく動作することがわかりました。 –

3

私はあなたがこれで多くの運があるとは思わない。問題は、Pythonで変数の型を静的に推論するのは、もっとも単純な場合を除いては非常に難しいということです。実行時まで型がわからないことが多いため、自動補完は不可能です。

IDEは静的解析を行い、明白で推測された推測を実現しますが、コンテナ内の要素を試すことさえできません。 bAの型であることがわかりますが、コードに小さな変化があっても、特に変更可能なコンテナにあるように、それを知らないようにする可能性があります。

ちなみに私はこれを完全なKomodo IDEで試してみましたが、それは良くありません。私は、Wing IDEのコード補完が優れていると聞いていますが、どちらの方が良いかはわかりません。

+0

私は自動タイプの推論が困難であることを理解します。私がしたいのは、マニュアルタイプの推論です。 私は、平均してウイングを見てみましょう。 –

+0

ああ、私は今理解しています。私の最初の考えは、interjayが言及する主張でしたが、それはKomodoのためには機能しません。私が働くことができるのは 'b = A(b)'を追加することだけですが、それは恐ろしいことであり、働くことが保証されておらず、副作用があります。 –

+0

が完全に同意すると、コード補完はPython用の言語では機能しないと私は考えています。 – zinking