diff options
author | Ethan Smith <ethan@ethanhs.me> | 2020-04-14 04:54:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-14 04:54:40 (GMT) |
commit | 8ef875028a3644a329c87ce420a73793e315143f (patch) | |
tree | 102695b9e45519561c88f9d9b91b66992cd40b72 | |
parent | cecf049673da6a24435acd1a6a3b34472b323c97 (diff) | |
download | cpython-8ef875028a3644a329c87ce420a73793e315143f.zip cpython-8ef875028a3644a329c87ce420a73793e315143f.tar.gz cpython-8ef875028a3644a329c87ce420a73793e315143f.tar.bz2 |
bpo-39481: Make weakref and WeakSet generic (GH-19497)
-rw-r--r-- | Lib/_weakrefset.py | 3 | ||||
-rw-r--r-- | Lib/test/test_genericalias.py | 2 | ||||
-rw-r--r-- | Objects/weakrefobject.c | 8 |
3 files changed, 12 insertions, 1 deletions
diff --git a/Lib/_weakrefset.py b/Lib/_weakrefset.py index 7a84823..b267780 100644 --- a/Lib/_weakrefset.py +++ b/Lib/_weakrefset.py @@ -3,6 +3,7 @@ # by abc.py to load everything else at startup. from _weakref import ref +from types import GenericAlias __all__ = ['WeakSet'] @@ -197,3 +198,5 @@ class WeakSet: def __repr__(self): return repr(self.data) + + __class_getitem__ = classmethod(GenericAlias) diff --git a/Lib/test/test_genericalias.py b/Lib/test/test_genericalias.py index 770aeef..686df17 100644 --- a/Lib/test/test_genericalias.py +++ b/Lib/test/test_genericalias.py @@ -33,6 +33,7 @@ from tempfile import TemporaryDirectory, SpooledTemporaryFile from urllib.parse import SplitResult, ParseResult from unittest.case import _AssertRaisesContext from queue import Queue, SimpleQueue +from weakref import WeakSet, ReferenceType, ref import typing from typing import TypeVar @@ -73,6 +74,7 @@ class BaseTest(unittest.TestCase): Array, LibraryLoader, SplitResult, ParseResult, ValueProxy, ApplyResult, + WeakSet, ReferenceType, ref, ShareableList, SimpleQueue, Future, _WorkItem, Morsel, diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c index 1e6697b..dd9b789 100644 --- a/Objects/weakrefobject.c +++ b/Objects/weakrefobject.c @@ -362,6 +362,12 @@ static PyMemberDef weakref_members[] = { {NULL} /* Sentinel */ }; +static PyMethodDef weakref_methods[] = { + {"__class_getitem__", (PyCFunction)Py_GenericAlias, + METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {NULL} /* Sentinel */ +}; + PyTypeObject _PyWeakref_RefType = { PyVarObject_HEAD_INIT(&PyType_Type, 0) @@ -392,7 +398,7 @@ _PyWeakref_RefType = { 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ - 0, /*tp_methods*/ + weakref_methods, /*tp_methods*/ weakref_members, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ |