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()
from reprlib import recursive_repr
from _thread import RLock
from types import GenericAlias
################################################################################
@ -656,6 +657,9 @@ class partialmethod(object):
def __isabstractmethod__(self):
return getattr(self.func, "__isabstractmethod__", False)
__class_getitem__ = classmethod(GenericAlias)
# Helper functions
def _unwrap_partial(func):
@ -1208,3 +1212,5 @@ class cached_property:
)
raise TypeError(msg) from None
return val
__class_getitem__ = classmethod(GenericAlias)

View File

@ -9,6 +9,7 @@ from collections.abc import *
from concurrent.futures import Future
from concurrent.futures.thread import _WorkItem
from contextlib import AbstractContextManager, AbstractAsyncContextManager
from functools import partial, partialmethod, _lru_cache_wrapper, cached_property
from ctypes import Array, LibraryLoader
from difflib import SequenceMatcher
from filecmp import dircmp
@ -49,6 +50,7 @@ class BaseTest(unittest.TestCase):
FileInput,
OrderedDict, Counter, UserDict, UserList,
Pattern, Match,
partial, partialmethod, cached_property,
AbstractContextManager, AbstractAsyncContextManager,
Awaitable, Coroutine,
AsyncIterable, AsyncIterator,

View File

@ -414,6 +414,8 @@ partial_setstate(partialobject *pto, PyObject *state)
static PyMethodDef partial_methods[] = {
{"__reduce__", (PyCFunction)partial_reduce, METH_NOARGS},
{"__setstate__", (PyCFunction)partial_setstate, METH_O},
{"__class_getitem__", (PyCFunction)Py_GenericAlias,
METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
{NULL, NULL} /* sentinel */
};