标签:python-3-x python-typing python
我想要一种python type-hint友好的方法来创建具有约束值范围的Type.
例如,基于类型str的URL类型,它将仅接受看起来像“ http” URL的字符串.
# this code is made up and will not compile
class URL(typing.NewType('_URL', str)):
def __init__(self, value: str, *args, **kwargs):
if not (value.startswith('http://') or value.startswith('https://')):
raise ValueError('string is not an acceptable URL')
解决方法:
对内置类型进行子类化可能会导致一些奇怪的情况(请考虑代码来检查type(…)是否为str.
这是一种纯类型方法,它是类型安全的,并且完全保留了字符串的类型:
from typing import NewType
_Url = NewType('_Url', str)
def URL(s: str) -> _Url:
if not s.startswith('https://'):
raise AssertionError(s)
return _Url(s)
print(type(URL('https://example.com')) is str) # prints `True`
这里的方法“隐藏”了函数运行时检查,该函数从api的角度看起来像构造函数,但实际上只是一个tiny type(我找不到对“微小类型”的规范引用,这似乎是最好的)我可以找到的资源).
标签:python-3-x,python-typing,python 来源: https://codeday.me/bug/20191211/2106421.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。