有没有办法将Python类型提示用作单位?类型提示文档中显示了一些示例,表明可能可以使用
NewType
,但是这些示例也表明,相同“new type”的两个值的加法不会得到“new type”的结果,而是基本类型。有没有一种方法来丰富类型定义,以便您可以指定像单位一样工作的类型提示(不是为了转换,而仅仅是当您获取不同单位时得到类型警告)?是否有类似这样的东西允许我执行此操作或类似操作:Seconds = UnitType('Seconds', float)
Meters = UnitType('Meters', float)
time1 = Seconds(5)+ Seconds(8) # gives a value of type `Seconds`
bad_units1 = Seconds(1) + Meters(5) # gives a type hint error, but probably works at runtime
time2 = Seconds(1)*5 # equivalent to `Seconds(1*5)`
# Multiplying units together of course get tricky, so I'm not concerned about that now.
我知道有针对单元的运行时库存在,但我的好奇心是想知道Python中的类型提示是否能够处理部分该功能。
mypy
,它提供了静态类型检查功能,这意味着它会在你运行程序之前告诉你是否存在错误。它使用标准库typing
。VSCode 的 mypy 插件。 - ninMonkeytyping
和某种静态检查器,很可能是mypy(但也可能是IDE集成的检查器或其他工具)。 - user2357112