[Python-checkins] bpo-19072: Classmethod can wrap other classmethod like descriptors (GH-29634) (GH-29643)

ambv webhook-mailer at python.org
Fri Nov 19 14:12:25 EST 2021


https://github.com/python/cpython/commit/bbe3c57c865439f2194eb760a4362b5506d221a7
commit: bbe3c57c865439f2194eb760a4362b5506d221a7
branch: 3.10
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: ambv <lukasz at langa.pl>
date: 2021-11-19T20:12:16+01:00
summary:

bpo-19072: Classmethod can wrap other classmethod like descriptors (GH-29634) (GH-29643)

staticmethod() also became callable in Python 3.10.

See: b83861f02.
(cherry picked from commit e34809e1c2a09478f4e0651d551c9c12d3c556ab)

Co-authored-by: Raymond Hettinger <rhettinger at users.noreply.github.com>

files:
M Doc/howto/descriptor.rst

diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst
index 575caeb720f3d..6ce062d0fa853 100644
--- a/Doc/howto/descriptor.rst
+++ b/Doc/howto/descriptor.rst
@@ -1264,6 +1264,9 @@ Using the non-data descriptor protocol, a pure Python version of
         def __get__(self, obj, objtype=None):
             return self.f
 
+        def __call__(self, *args, **kwds):
+            return self.f(*args, **kwds)
+
 .. testcode::
     :hide:
 
@@ -1272,6 +1275,8 @@ Using the non-data descriptor protocol, a pure Python version of
         def f(x):
             return x * 10
 
+    wrapped_ord = StaticMethod(ord)
+
 .. doctest::
     :hide:
 
@@ -1279,6 +1284,8 @@ Using the non-data descriptor protocol, a pure Python version of
     30
     >>> E_sim().f(3)
     30
+    >>> wrapped_ord('A')
+    65
 
 
 Class methods
@@ -1344,7 +1351,7 @@ Using the non-data descriptor protocol, a pure Python version of
             if cls is None:
                 cls = type(obj)
             if hasattr(type(self.f), '__get__'):
-                return self.f.__get__(cls)
+                return self.f.__get__(cls, cls)
             return MethodType(self.f, cls)
 
 .. testcode::



More information about the Python-checkins mailing list