【发布时间】:2019-11-25 12:34:49
【问题描述】:
我正在开发一个 Django 项目。由于这是一个新项目,我想用 python 3.6+ 类型注释对其进行完全注释。我正在尝试注释模型,但我很难找到一个好的方法。
我们以IntegerField 为例。我看到了两种注释它的选择:
# number 1
int_field: int = models.IntegerField()
# number 2
int_field: models.IntegerField = models.IntegerField()
mypy 中的数字 1 失败:
Incompatible types in assignment (expression has type "IntegerField[<nothing>, <nothing>]", variable has type "int")
2 号对于 mypy 来说是可以的,但作为 PyCharm 的 IDE 无法解决它,并且经常抱怨使用了错误的类型。
是否有任何最佳实践来正确注释模型,这将满足 mypy 和 IDE 的要求?
【问题讨论】:
-
由于您似乎在令人满意的工具上投入了大量时间,因此您可能会惊讶地发现,您所做的并不是 不是 设计的类型注释:静态打字。
-
你不是在寻找类似mypy-django的东西吗?
-
看起来 mypy-django 不提供模型的类型注释:github.com/machinalis/mypy-django-example/blob/master/polls/…
-
@KlausD。 - 我不确定我是否明白你在说什么,你能详细说明一下吗?
-
@aaron:不,因为这绝对是错误的。问题是 Django 模型是一个非常不同的野兽。类包含字段,实例包含具体值。类型随上下文变化,实例没有
IntegerField,但如果您使用Union,那么所有访问该字段的代码都必须考虑这种可能性。
标签: python django type-annotation