为什么 `re.Pattern` 是通用的?

问题描述 投票:0回答:1
import re

x = re.compile(r"hello")

在上面的代码中,

x
被确定为类型
re.Pattern[str]
。但为什么
re.Pattern
是通用的,然后专门用于字符串呢?
re.Pattern[int]
代表什么?

python mypy python-typing python-re
1个回答
0
投票

re.Pattern
变得通用,因为您还可以编译仅在
bytes
对象上运行的
bytes
模式:

p = re.compile(b'fo+ba?r')

p.search(b'foobar')  # fine
p.search('foobar')   # TypeError: cannot use a bytes pattern on a string-like object

在类型检查时,它被定义为通用的

AnyStr

class Pattern(Generic[AnyStr]):
    ...

...其中

AnyStr
是具有两个约束
TypeVar
str
bytes

AnyStr = TypeVar("AnyStr", str, bytes)
因此,

re.Pattern[int]
毫无意义,会导致类型检查错误。

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