bpo-39481: Make functools.cached_property, partial, partialmethod generic (#19427)

This commit is contained in:
Ethan Smith 2020-04-13 21:53:04 -07:00 committed by GitHub
parent 584a3cfda4
commit cecf049673
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 0 deletions

View File

@ -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)

View File

@ -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,

View File

@ -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 */
}; };