
To kick off the work of supporting generics, this adds many new (currently failing) tests, showing the behavior we plan to support. This is still missing a lot! Not included: - typevar tuples - param specs - variance - `Self` But it's a good start! We can add more failing tests for those once we tackle these. --------- Co-authored-by: Carl Meyer <carl@astral.sh>
1.7 KiB
Legacy type variables
The tests in this file focus on how type variables are defined using the legacy notation. Most uses of type variables are tested in other files in this directory; we do not duplicate every test for both type variable syntaxes.
Unless otherwise specified, all quotations come from the Generics section of the typing spec.
Type variables
Defining legacy type variables
Generics can be parameterized by using a factory available in
typing
calledTypeVar
.
This was the only way to create type variables prior to PEP 695/Python 3.12. It is still available in newer Python releases.
from typing import TypeVar
T = TypeVar("T")
Directly assigned to a variable
A
TypeVar()
expression must always directly be assigned to a variable (it should not be used as part of a larger expression).
from typing import TypeVar
# TODO: error
TestList = list[TypeVar("W")]
TypeVar
parameter must match variable name
The argument to
TypeVar()
must be a string equal to the variable name to which it is assigned.
from typing import TypeVar
# TODO: error
T = TypeVar("Q")
No redefinition
Type variables must not be redefined.
from typing import TypeVar
T = TypeVar("T")
# TODO: error
T = TypeVar("T")
Cannot have only one constraint
TypeVar
supports constraining parametric types to a fixed set of possible types...There should be at least two constraints, if any; specifying a single constraint is disallowed.
from typing import TypeVar
# TODO: error: [invalid-type-variable-constraints]
T = TypeVar("T", int)