Python 将类型注释为正则表达式模式

问题描述 投票:0回答:2

我有字典注释

class OrderDict(TypedDict):
    name: str
    price: float
    time: str

time:
的值的格式始终类似于
2022-01-01 00:00:00
"%Y-%m-%d %H:%M:%S"
。我想要一种在类型注释中表达这一点的方法

类似的东西

class OrderDict(TypedDict):
    name: str
    price: float
    time: Pattern["%Y-%m-%d %H:%M:%S"]

目标是通过 VSCode Intellisense 和 Pylance 进行 IDE 提示。

是否支持正则表达式定义的类型注释?

python mypy python-typing pylance
2个回答
2
投票

抛开关于什么应该或不应该被视为类型的哲学讨论,当前类型系统不支持您所要求的内容。

这当然是有效的语法,你当然可以编写一些滥用

__class_getitem__
的东西来返回动态创建的自身子类。从运行时的角度来看,您可以实现所需的逻辑,而不会出现太大问题。

但是静态类型检查器不会识别这一点(尤其是),因为它不符合 Python 中当前类型的规范。正如其他人指出的那样,从 Python 类型系统的角度来看,字符串(文字)不被视为类型,因此不能作为类型参数传递给泛型类型。


1
投票

它不是一种类型,因此无法表达,也可能不受支持。

"%Y"
"%d"
之间没有区别。这些都是字符串。类型注释的存在是为了静态检查类型,而不是字符串格式。

唯一不适合的情况是

Literal
,但它们仅与常量相关。

© www.soinside.com 2019 - 2024. All rights reserved.