2017-10-01 6 views
3

PyCharmは、MongoEngineフィールドの値を操作するときに警告を出します。例えば、StringFieldで作業するときstrのように:私はtyping.cast(すなわちtyping.cast(str, doc.s).endswith('test')を使用しない限り、私はクラスStringFieldの警告未解決の属性参照「endswith」を取得MongoEngineフィールド、型付け、およびPyCharm

class ExampleDocument(Document): 
    s = StringField() 

doc = ExampleDocument(s='mongoengine-test') 
print(doc.s.endswith('test')) 

コードが意図したとおりに実行されますが、そこにあります。これらの警告を取り除き、またMongoEngineフィールドタイプに必要なオートコンプリートを取得する方法はありますか?

答えて

1

おそらくすべての考えられる解決策の中で最高のものではありませんが、フィールド宣言に直接タイプヒントを追加できます。コメント付き2.7構文を使用する(3.xでも動作):

class ExampleDocument(Document): 
    s = StringField() # type: str 

または3.xで:ドキュメントの文字列内のタイプdefintionsを使用して

class ExampleDocument(Document): 
    s: str = StringField() 

も動作するはずです:

class ExampleDocument(Document): 
    s = StringField() 
    """:type: str""" 

どちらかそれらの一つは、(PythonのプラグインまたはIntelij)PyCharmを与えますこれらのフィールドに使用するタイプについての必要な手掛かり。

元のmongoengineフィールドタイプから何かにアクセスすると、タイプチェックに使用されたタイプを効果的に置き換えたので、警告が表示されることに注意してください。 PyCharmドキュメントhereにPyCharmで型HINSを使用して

from typing import Union 
class ExampleDocument(Document): 
    s = StringField() # type: Union[str, StringField] 

あなたはより多くの詳細を見つける:あなたはPyCharmがmongoengineとPythonのタイプの両方を認識したい場合は、連合のタイプを使用することができます。

+0

ありがとうございます、それは私が使用しているものです。あるタイプが別のタイプを拡張することを宣言する方法はありますか(例えば、 'StringField'は' str'のすべてのメソッドを実装しています)? –

+1

コメントやPython 3.xのタイプヒントで 'Union [str、StringField]'を使うことができます。 Unionは 'typing'モジュールからインポートする必要があります。 – Markus

関連する問題