bpo-39481: Implementation for PEP 585 (#18239)

This implements things like `list[int]`,
which returns an object of type `types.GenericAlias`.
This object mostly acts as a proxy for `list`,
but has attributes `__origin__` and `__args__`
that allow recovering the parts (with values `list` and `(int,)`.

There is also an approximate notion of type variables;
e.g. `list[T]` has a `__parameters__` attribute equal to `(T,)`.
Type variables are objects of type `typing.TypeVar`.
This commit is contained in:
Guido van Rossum 2020-04-07 09:50:06 -07:00 committed by GitHub
parent 9cc3ebd7e0
commit 48b069a003
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
30 changed files with 830 additions and 53 deletions

View file

@ -28,6 +28,8 @@ import stat as st
from _collections_abc import _check_methods
GenericAlias = type(list[int])
_names = sys.builtin_module_names
# Note: more names are added to __all__ later.
@ -1074,8 +1076,7 @@ class PathLike(abc.ABC):
return _check_methods(subclass, '__fspath__')
return NotImplemented
def __class_getitem__(cls, type):
return cls
__class_getitem__ = classmethod(GenericAlias)
if name == 'nt':