import re
x = re.compile(r"hello")
In the above code, x is determined to have type re.Pattern[str]. But why is re.Pattern generic, and then specialized to string? What does a re.Pattern[int] represent?
re.Pattern was made generic because you can also compile a bytes pattern that will operate only on bytes objects:
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
At type-checking time, it is defined as generic over AnyStr:
class Pattern(Generic[AnyStr]):
    ...
...where AnyStr is a TypeVar with two constraints, str and bytes:
AnyStr = TypeVar("AnyStr", str, bytes)
re.Pattern[int] is therefore meaningless and would cause a type-checking error.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With