MongoEngine字段,输入和PyCharm

时间:2017-10-01 12:17:50

标签: python-3.x pycharm mongoengine

PyCharm在处理MongoEngine字段的值时会发出类型警告。例如,与StringField一样使用str

class ExampleDocument(Document):
    s = StringField()

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

除非我使用typing.cast(即typing.cast(str, doc.s).endswith('test'),否则我会收到类似StringField 的未解析属性引用'endswith'的警告。代码按预期执行,但有没有办法摆脱这些警告,并获得MongoEngine字段类型的必要自动填充?

1 个答案:

答案 0 :(得分:1)

它可能不是所有可想到的解决方案中最好的,但您可以直接将自己的类型提示添加到字段声明中。使用2.7语法和注释(也适用于3.x):

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

或3.x:

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

在doc字符串中使用类型定义也应该有效:

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

其中任何一个都为PyCharm(或带有python插件的Intelij)提供了有关用于这些字段的类型的必要线索。

请注意,现在当您从原始mongoengine字段类型访问某些内容时,您将收到警告,因为您有效地替换了用于类型检查的类型。如果你想让PyCharm同时识别mongoengine和Python类型,你可以使用Union类型:

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

您可以在PyCharm docs here中找到有关在PyCharm中使用类型hins的更多详细信息。