MongoEngine 字段、输入和 PyCharm
MongoEngine fields, typing and PyCharm
PyCharm 在处理 MongoEngine 字段的值时给出类型警告。例如,当使用 StringField
时与使用 str
:
class ExampleDocument(Document):
s = StringField()
doc = ExampleDocument(s='mongoengine-test')
print(doc.s.endswith('test'))
我收到警告 class StringField 的未解析属性引用 'endswith',除非我使用 typing.cast
(即 typing.cast(str, doc.s).endswith('test')
。代码按预期执行,但有什么方法可以消除这些警告并获得 MongoEngine 字段类型所需的自动完成功能?
这可能不是所有可想到的解决方案中最好的,但您可以将自己的类型提示直接添加到字段声明中。使用带注释的 2.7 语法(也适用于 3.x):
class ExampleDocument(Document):
s = StringField() # type: str
或 3.x:
class ExampleDocument(Document):
s: str = StringField()
在文档字符串中使用类型定义也应该有效:
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 文档 here.
中找到有关使用类型 hins 的更多详细信息。
PyCharm 在处理 MongoEngine 字段的值时给出类型警告。例如,当使用 StringField
时与使用 str
:
class ExampleDocument(Document):
s = StringField()
doc = ExampleDocument(s='mongoengine-test')
print(doc.s.endswith('test'))
我收到警告 class StringField 的未解析属性引用 'endswith',除非我使用 typing.cast
(即 typing.cast(str, doc.s).endswith('test')
。代码按预期执行,但有什么方法可以消除这些警告并获得 MongoEngine 字段类型所需的自动完成功能?
这可能不是所有可想到的解决方案中最好的,但您可以将自己的类型提示直接添加到字段声明中。使用带注释的 2.7 语法(也适用于 3.x):
class ExampleDocument(Document):
s = StringField() # type: str
或 3.x:
class ExampleDocument(Document):
s: str = StringField()
在文档字符串中使用类型定义也应该有效:
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 文档 here.
中找到有关使用类型 hins 的更多详细信息。