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

staticmethod() also became callable in Python 3.10.

See: b83861f02.
This commit is contained in:
Raymond Hettinger 2021-11-19 12:43:49 -06:00 committed by GitHub
parent d32316a2aa
commit e34809e1c2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View 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::