]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-19072: Classmethod can wrap other classmethod like descriptors (GH-29634) (GH...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 19 Nov 2021 19:12:16 +0000 (11:12 -0800)
committerGitHub <noreply@github.com>
Fri, 19 Nov 2021 19:12:16 +0000 (20:12 +0100)
staticmethod() also became callable in Python 3.10.

See: b83861f02.
(cherry picked from commit e34809e1c2a09478f4e0651d551c9c12d3c556ab)

Co-authored-by: Raymond Hettinger <rhettinger@users.noreply.github.com>
Doc/howto/descriptor.rst

index 575caeb720f3d0fa6f84580e7a449f768d50abe2..6ce062d0fa853e0d09f15f8b44f6b37c60cd5377 100644 (file)
@@ -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::