bpo-39481: Make functools.cached_property, partial, partialmethod generic (#19427)
This commit is contained in:
parent
584a3cfda4
commit
cecf049673
|
@ -20,6 +20,7 @@ from collections import namedtuple
|
||||||
# import types, weakref # Deferred to single_dispatch()
|
# import types, weakref # Deferred to single_dispatch()
|
||||||
from reprlib import recursive_repr
|
from reprlib import recursive_repr
|
||||||
from _thread import RLock
|
from _thread import RLock
|
||||||
|
from types import GenericAlias
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
@ -656,6 +657,9 @@ class partialmethod(object):
|
||||||
def __isabstractmethod__(self):
|
def __isabstractmethod__(self):
|
||||||
return getattr(self.func, "__isabstractmethod__", False)
|
return getattr(self.func, "__isabstractmethod__", False)
|
||||||
|
|
||||||
|
__class_getitem__ = classmethod(GenericAlias)
|
||||||
|
|
||||||
|
|
||||||
# Helper functions
|
# Helper functions
|
||||||
|
|
||||||
def _unwrap_partial(func):
|
def _unwrap_partial(func):
|
||||||
|
@ -1208,3 +1212,5 @@ class cached_property:
|
||||||
)
|
)
|
||||||
raise TypeError(msg) from None
|
raise TypeError(msg) from None
|
||||||
return val
|
return val
|
||||||
|
|
||||||
|
__class_getitem__ = classmethod(GenericAlias)
|
||||||
|
|
|
@ -9,6 +9,7 @@ from collections.abc import *
|
||||||
from concurrent.futures import Future
|
from concurrent.futures import Future
|
||||||
from concurrent.futures.thread import _WorkItem
|
from concurrent.futures.thread import _WorkItem
|
||||||
from contextlib import AbstractContextManager, AbstractAsyncContextManager
|
from contextlib import AbstractContextManager, AbstractAsyncContextManager
|
||||||
|
from functools import partial, partialmethod, _lru_cache_wrapper, cached_property
|
||||||
from ctypes import Array, LibraryLoader
|
from ctypes import Array, LibraryLoader
|
||||||
from difflib import SequenceMatcher
|
from difflib import SequenceMatcher
|
||||||
from filecmp import dircmp
|
from filecmp import dircmp
|
||||||
|
@ -49,6 +50,7 @@ class BaseTest(unittest.TestCase):
|
||||||
FileInput,
|
FileInput,
|
||||||
OrderedDict, Counter, UserDict, UserList,
|
OrderedDict, Counter, UserDict, UserList,
|
||||||
Pattern, Match,
|
Pattern, Match,
|
||||||
|
partial, partialmethod, cached_property,
|
||||||
AbstractContextManager, AbstractAsyncContextManager,
|
AbstractContextManager, AbstractAsyncContextManager,
|
||||||
Awaitable, Coroutine,
|
Awaitable, Coroutine,
|
||||||
AsyncIterable, AsyncIterator,
|
AsyncIterable, AsyncIterator,
|
||||||
|
|
|
@ -414,6 +414,8 @@ partial_setstate(partialobject *pto, PyObject *state)
|
||||||
static PyMethodDef partial_methods[] = {
|
static PyMethodDef partial_methods[] = {
|
||||||
{"__reduce__", (PyCFunction)partial_reduce, METH_NOARGS},
|
{"__reduce__", (PyCFunction)partial_reduce, METH_NOARGS},
|
||||||
{"__setstate__", (PyCFunction)partial_setstate, METH_O},
|
{"__setstate__", (PyCFunction)partial_setstate, METH_O},
|
||||||
|
{"__class_getitem__", (PyCFunction)Py_GenericAlias,
|
||||||
|
METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
|
||||||
{NULL, NULL} /* sentinel */
|
{NULL, NULL} /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue