mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
bpo-43917: Fix pure python equivalent for classmethod (GH-25544)
Reported by Yahor Harunovich.
This commit is contained in:
parent
6afb0a8078
commit
14092b5a4a
2 changed files with 14 additions and 2 deletions
|
@ -1329,7 +1329,7 @@ Using the non-data descriptor protocol, a pure Python version of
|
|||
def __get__(self, obj, cls=None):
|
||||
if cls is None:
|
||||
cls = type(obj)
|
||||
if hasattr(obj, '__get__'):
|
||||
if hasattr(type(self.f), '__get__'):
|
||||
return self.f.__get__(cls)
|
||||
return MethodType(self.f, cls)
|
||||
|
||||
|
@ -1342,6 +1342,12 @@ Using the non-data descriptor protocol, a pure Python version of
|
|||
def cm(cls, x, y):
|
||||
return (cls, x, y)
|
||||
|
||||
@ClassMethod
|
||||
@property
|
||||
def __doc__(cls):
|
||||
return f'A doc for {cls.__name__!r}'
|
||||
|
||||
|
||||
.. doctest::
|
||||
:hide:
|
||||
|
||||
|
@ -1353,6 +1359,11 @@ Using the non-data descriptor protocol, a pure Python version of
|
|||
>>> t.cm(11, 22)
|
||||
(<class 'T'>, 11, 22)
|
||||
|
||||
# Check the alternate path for chained descriptors
|
||||
>>> T.__doc__
|
||||
"A doc for 'T'"
|
||||
|
||||
|
||||
The code path for ``hasattr(obj, '__get__')`` was added in Python 3.9 and
|
||||
makes it possible for :func:`classmethod` to support chained decorators.
|
||||
For example, a classmethod and property could be chained together:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue