python - 使用 Python 类型提示强制使用数字单位

标签 python types units-of-measurement

有没有办法使用 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 Adaimplementable in C++

关于python - 使用 Python 类型提示强制使用数字单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62603598/

相关文章:

python - 如何使用切片列出文本中每个单词的最后两个字母的列表?

Python - 使用 xmlrpc api 插入 HTML 内容 tp WordPress

.net - Powershell 从字符串中生成 System.Type

c# - 如何使用 UnitsNet nuget 包中的 Parse() 方法

python - Python 中的 MySQL 查询速度较慢,但​​其他地方速度较快

python - 我如何跳过 token 身份验证类仅获取请求djangorest框架

java - 在 Java 中 boolean 类型转换没用吗?

python - 检查列表中值的类型的意外结果 - 关于 boolean 值

ios - 使用不同单位类型进行测量的最佳方法

不同屏幕上的 CSS 像素/em 单位不同