有没有办法使用 Python 类型提示作为单位? type hint docs 显示了一些示例,表明使用 NewType
是可能的,但这些示例还表明,相同“新类型”的两个值的相加不会给出“新类型”的结果,而是给出基本类型的结果。有没有办法丰富类型定义,以便您可以指定像单位一样工作的类型提示(不是在它们转换的范围内,而是在获得不同单位时收到类型警告)?可以让我这样做或类似的事情:
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 中的类型提示是否能够处理其中的一些功能。
最佳答案
你链接的 on the page 不是答案吗?
from typing import NewType
Seconds = NewType('Seconds', float)
Meters = NewType('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)`
看起来,由于 we can't pass a value, only a type, into a generic ,不可能进行全维分析 as available in Ada 和 implementable in C++ 。
关于python - 使用 Python 类型提示强制使用数字单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62603598/