From: Raymond Hettinger Date: Tue, 20 Feb 2024 07:53:25 +0000 (-0600) Subject: gh-113157: Document and test __get__ for MethodType (gh-115492) X-Git-Tag: v3.13.0a5~330 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=acda1757bc682922292215906459c2735ee99c04;p=thirdparty%2FPython%2Fcpython.git gh-113157: Document and test __get__ for MethodType (gh-115492) --- diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index 7d787c1c42df..e72386a4da4f 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -1192,6 +1192,10 @@ roughly equivalent to: "Emulate method_getattro() in Objects/classobject.c" return getattr(self.__func__, name) + def __get__(self, obj, objtype=None): + "Emulate method_descr_get() in Objects/classobject.c" + return self + To support automatic creation of methods, functions include the :meth:`__get__` method for binding methods during attribute access. This means that functions are non-data descriptors that return bound methods @@ -1214,8 +1218,20 @@ descriptor works in practice: .. testcode:: class D: - def f(self, x): - return x + def f(self): + return self + + class D2: + pass + +.. doctest:: + :hide: + + >>> d = D() + >>> d2 = D2() + >>> d2.f = d.f.__get__(d2, D2) + >>> d2.f() is d + True The function has a :term:`qualified name` attribute to support introspection: