mirror of https://github.com/python/cpython
bpo-43917: Fix pure python equivalent for classmethod (GH-25544)
Reported by Yahor Harunovich.
This commit is contained in:
parent
6afb0a8078
commit
14092b5a4a
|
@ -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:
|
||||
|
|
|
@ -388,7 +388,7 @@ Brian Curtin
|
|||
Jason Curtis
|
||||
Hakan Celik
|
||||
Paul Dagnelie
|
||||
Florian Dahlitz
|
||||
Florian Dahlitz
|
||||
Lisandro Dalcin
|
||||
Darren Dale
|
||||
Andrew Dalke
|
||||
|
@ -694,6 +694,7 @@ Michael Haubenwallner
|
|||
Janko Hauser
|
||||
Flavian Hautbois
|
||||
Rycharde Hawkes
|
||||
Yahor Harunovich
|
||||
Ben Hayden
|
||||
Jochen Hayek
|
||||
Tim Heaney
|
||||
|
|
Loading…
Reference in New Issue