]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-20751: Replace method example with attribute example, matching the descriptor...
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Sat, 4 Dec 2021 02:37:08 +0000 (20:37 -0600)
committerGitHub <noreply@github.com>
Sat, 4 Dec 2021 02:37:08 +0000 (20:37 -0600)
Doc/reference/datamodel.rst

index b14b2cb1ef5e4d309a7128ac51af6060f90cd4f4..41092458102deae6f735a7ab92c113072e442366 100644 (file)
@@ -1818,10 +1818,38 @@ Class Binding
    ``A.__dict__['x'].__get__(None, A)``.
 
 Super Binding
-   If ``a`` is an instance of :class:`super`, then the binding ``super(B, obj).m()``
-   searches ``obj.__class__.__mro__`` for the base class ``A``
-   immediately following ``B`` and then invokes the descriptor with the call:
-   ``A.__dict__['m'].__get__(obj, obj.__class__)``.
+   A dotted lookup such as ``super(A, a).x`` searches
+   ``obj.__class__.__mro__`` for a base class ``B`` following ``A`` and then
+   returns ``B.__dict__['x'].__get__(a, A)``.  If not a descriptor, ``x`` is
+   returned unchanged.
+
+.. testcode::
+    :hide:
+
+    class Desc:
+        def __get__(*args):
+            return args
+
+    class B:
+
+        x = Desc()
+
+    class A(B):
+
+        x = 999
+
+        def m(self):
+            'Demonstrate these two calls are equivalent'
+            result1 = super(A, a).x
+            result2 = B.__dict__['x'].__get__(a, A)
+            return result1 == result2
+
+.. doctest::
+    :hide:
+
+    >>> a = A()
+    >>> a.m()
+    True
 
 For instance bindings, the precedence of descriptor invocation depends on
 which descriptor methods are defined.  A descriptor can define any combination