【发布时间】:2021-11-11 06:13:28
【问题描述】:
使用 python 类型系统,我有时知道变量或表达式的类型,因为我安装了运行时检查来验证它。有没有办法用注释来表示?
例如,假设我有一个函数combop,如果它的参数属于Combination 类,它会返回True。进一步假设Combination 类有一个名为tds 的字段。
if combop(x):
return f(x.tds)
else:
return f([])
在这个例子中,我想向检查器保证,在 if 的 then 部分中,x 的类型为 Combination,而x.tds 是有意义的。
这种情况的一个例子是here python-rte 的第 172 行。 IDE 抱怨d.tds 和n.s。我假设有一种方法可以通过类型注释来解释我的意图,并且 IDE 会在可能的情况下接受或验证我的声明。
在某些函数式语言(例如 Scala)中完成此操作的方式是使用模式匹配。在模式匹配的子句中,类型推断器能够限制某些变量的类型。在其他一些语言(例如 Common Lisp)中,有一个 declare 语法允许程序员向类型推断器提供提示,这可能会或可能不会产生运行时开销,具体取决于编译器设置。
【问题讨论】:
-
@AlexWaygood,我不确定这是否回答了我的问题。在我看来,这是解决问题的一种非常奇怪的方式。我在想有一种方法可以做一些注释来保证某种类型的 x 对
.tds有意义。 -
Python 的类型检查器不如静态类型语言中的类型检查器复杂,因此在 Scala 中相当容易标记的内容在 python 中通常会更复杂。我会看看我是否可以在答案中写一些想法。
-
还有一个事实是,Python 的打字系统还是很新的,所以语法还在摸索中。可能随着时间的推移,该语言采用了更多在 Scala 中发现的想法。 github.com/python/typing/issues/813
标签: python type-hinting python-typing duck-typing