summaryrefslogtreecommitdiffstats
path: root/Lib/contextlib.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2020-04-07 16:50:06 (GMT)
committerGitHub <noreply@github.com>2020-04-07 16:50:06 (GMT)
commit48b069a003ba6c684a9ba78493fbbec5e89f10b8 (patch)
treee67e71abd17516cea5fe1a1ec487bf929ab0b9fd /Lib/contextlib.py
parent9cc3ebd7e04cb645ac7b2f372eaafa7464e16b9c (diff)
downloadcpython-48b069a003ba6c684a9ba78493fbbec5e89f10b8.zip
cpython-48b069a003ba6c684a9ba78493fbbec5e89f10b8.tar.gz
cpython-48b069a003ba6c684a9ba78493fbbec5e89f10b8.tar.bz2
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`.
Diffstat (limited to 'Lib/contextlib.py')
-rw-r--r--Lib/contextlib.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/Lib/contextlib.py b/Lib/contextlib.py
index 69c2728..ff92d9f 100644
--- a/Lib/contextlib.py
+++ b/Lib/contextlib.py
@@ -4,7 +4,7 @@ import sys
import _collections_abc
from collections import deque
from functools import wraps
-from types import MethodType
+from types import MethodType, GenericAlias
__all__ = ["asynccontextmanager", "contextmanager", "closing", "nullcontext",
"AbstractContextManager", "AbstractAsyncContextManager",
@@ -16,6 +16,8 @@ class AbstractContextManager(abc.ABC):
"""An abstract base class for context managers."""
+ __class_getitem__ = classmethod(GenericAlias)
+
def __enter__(self):
"""Return `self` upon entering the runtime context."""
return self
@@ -36,6 +38,8 @@ class AbstractAsyncContextManager(abc.ABC):
"""An abstract base class for asynchronous context managers."""
+ __class_getitem__ = classmethod(GenericAlias)
+
async def __aenter__(self):
"""Return `self` upon entering the runtime context."""
return self