4
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?

2

1 Answer 1

4

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.

0

Not the answer you're looking for? Browse other questions tagged or ask your own question.