diff options
author | Raymond Hettinger <rhettinger@users.noreply.github.com> | 2021-04-23 00:53:36 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-23 00:53:36 (GMT) |
commit | 14092b5a4ae4caf1c77f685450016a0d1ad0bd6c (patch) | |
tree | 7ad96a63935aa8aaa042ad5557cc4b6abc3ade59 /Doc/howto/descriptor.rst | |
parent | 6afb0a8078ff3fc93adc4177565c56f820ca2880 (diff) | |
download | cpython-14092b5a4ae4caf1c77f685450016a0d1ad0bd6c.zip cpython-14092b5a4ae4caf1c77f685450016a0d1ad0bd6c.tar.gz cpython-14092b5a4ae4caf1c77f685450016a0d1ad0bd6c.tar.bz2 |
bpo-43917: Fix pure python equivalent for classmethod (GH-25544)
Reported by Yahor Harunovich.
Diffstat (limited to 'Doc/howto/descriptor.rst')
-rw-r--r-- | Doc/howto/descriptor.rst | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index bf026f4..074591f 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -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: |