@@ -42,7 +42,7 @@ add new capabilities one by one.
4242Simple example: A descriptor that returns a constant
4343---------------------------------------------------- 
4444
45- The :class: `!Ten ` class is a descriptor whose :meth: `__get__ ` method always
45+ The :class: `!Ten ` class is a descriptor whose :meth: `~object. __get__
4646returns the constant ``10 ``:
4747
4848.. testcode ::
@@ -120,10 +120,10 @@ different, updated answers each time::
120120    2 
121121
122122Besides showing how descriptors can run computations, this example also
123- reveals the purpose of the parameters to :meth: `__get__ `.  The *self *
123+ reveals the purpose of the parameters to :meth: `~object. __get__self *
124124parameter is *size *, an instance of *DirectorySize *.  The *obj * parameter is
125125either *g * or *s *, an instance of *Directory *.  It is the *obj * parameter that
126- lets the :meth: `__get__ ` method learn the target directory.  The *objtype *
126+ lets the :meth: `~object. __get__objtype *
127127parameter is the class *Directory *.
128128
129129
@@ -133,7 +133,7 @@ Managed attributes
133133A popular use for descriptors is managing access to instance data.  The
134134descriptor is assigned to a public attribute in the class dictionary while the
135135actual data is stored as a private attribute in the instance dictionary.  The
136- descriptor's :meth: `__get__ ` and :meth: `__set__ ` methods are triggered when
136+ descriptor's :meth: `~object. __get__:meth: `~object. __set__
137137the public attribute is accessed.
138138
139139In the following example, *age * is the public attribute and *_age * is the
@@ -217,7 +217,7 @@ variable name was used.
217217
218218In this example, the :class: `!Person ` class has two descriptor instances,
219219*name * and *age *.  When the :class: `!Person ` class is defined, it makes a
220- callback to :meth: `__set_name__ ` in *LoggedAccess * so that the field names can
220+ callback to :meth: `~object. __set_name__LoggedAccess * so that the field names can
221221be recorded, giving each descriptor its own *public_name * and *private_name *:
222222
223223.. testcode ::
@@ -254,7 +254,7 @@ be recorded, giving each descriptor its own *public_name* and *private_name*:
254254            self.age += 1
255255
256256An interactive session shows that the :class: `!Person ` class has called
257- :meth: `__set_name__ ` so that the field names would be recorded.  Here
257+ :meth: `~object. __set_name__
258258we call :func: `vars ` to look up the descriptor without triggering it:
259259
260260.. doctest ::
@@ -294,10 +294,10 @@ The two *Person* instances contain only the private names:
294294Closing thoughts
295295---------------- 
296296
297- A :term: `descriptor ` is what we call any object that defines :meth: `__get__ `,
298- :meth: `__set__ `, or :meth: `__delete__ `.
297+ A :term: `descriptor ` is what we call any object that defines :meth: `~object. __get__
298+ :meth: `~object. __set__:meth: `~object. __delete__
299299
300- Optionally, descriptors can have a :meth: `__set_name__ ` method.  This is only
300+ Optionally, descriptors can have a :meth: `~object. __set_name__
301301used in cases where a descriptor needs to know either the class where it was
302302created or the name of class variable it was assigned to.  (This method, if
303303present, is called even if the class is not a descriptor.)
@@ -501,8 +501,8 @@ Definition and introduction
501501--------------------------- 
502502
503503In general, a descriptor is an attribute value that has one of the methods in
504- the descriptor protocol.  Those methods are :meth: `__get__ `, :meth: `__set__ `,
505- and :meth: `__delete__ `.  If any of those methods are defined for an
504+ the descriptor protocol.  Those methods are :meth: `~object. __get__:meth: `~object. __set__
505+ and :meth: `~object. __delete__
506506attribute, it is said to be a :term: `descriptor `.
507507
508508The default behavior for attribute access is to get, set, or delete the
@@ -534,8 +534,8 @@ That is all there is to it.  Define any of these methods and an object is
534534considered a descriptor and can override default behavior upon being looked up
535535as an attribute.
536536
537- If an object defines :meth: `__set__ ` or :meth: `__delete__ `, it is considered
538- a data descriptor.  Descriptors that only define :meth: `__get__ ` are called
537+ If an object defines :meth: `~object. __set__:meth: `~object. __delete__
538+ a data descriptor.  Descriptors that only define :meth: `~object. __get__
539539non-data descriptors (they are often used for methods but other uses are
540540possible).
541541
@@ -545,9 +545,9 @@ has an entry with the same name as a data descriptor, the data descriptor
545545takes precedence.  If an instance's dictionary has an entry with the same
546546name as a non-data descriptor, the dictionary entry takes precedence.
547547
548- To make a read-only data descriptor, define both :meth: `__get__ ` and
549- :meth: `__set__ ` with the :meth: `__set__ ` raising an :exc: `AttributeError ` when
550- called.  Defining the :meth: `__set__ ` method with an exception raising
548+ To make a read-only data descriptor, define both :meth: `~object. __get__
549+ :meth: `~object. __set__:meth: `~object. __set__:exc: `AttributeError ` when
550+ called.  Defining the :meth: `~object. __set__
551551placeholder is enough to make it a data descriptor.
552552
553553
@@ -574,7 +574,7 @@ Invocation from an instance
574574
575575Instance lookup scans through a chain of namespaces giving data descriptors
576576the highest priority, followed by instance variables, then non-data
577- descriptors, then class variables, and lastly :meth: `__getattr__ ` if it is
577+ descriptors, then class variables, and lastly :meth: `~object. __getattr__
578578provided.
579579
580580If a descriptor is found for ``a.x ``, then it is invoked with:
@@ -719,12 +719,12 @@ a pure Python equivalent:
719719    >>> object_getattribute(u2, ' x' ==  u2.x ==  (D1, u2, U2) 
720720    True 
721721
722- Note, there is no :meth: `__getattr__ ` hook in the :meth: `__getattribute__ `
723- code.  That is why calling :meth: `__getattribute__ ` directly or with
724- ``super().__getattribute__ `` will bypass :meth: `__getattr__ ` entirely.
722+ Note, there is no :meth: `~object. __getattr__:meth: `~object. __getattribute__
723+ code.  That is why calling :meth: `~object. __getattribute__
724+ ``super().__getattribute__ `` will bypass :meth: `~object. __getattr__
725725
726726Instead, it is the dot operator and the :func: `getattr ` function that are
727- responsible for invoking :meth: `__getattr__ ` whenever :meth: `__getattribute__ `
727+ responsible for invoking :meth: `~object. __getattr__:meth: `~object. __getattribute__
728728raises an :exc: `AttributeError `.  Their logic is encapsulated in a helper
729729function:
730730
@@ -776,8 +776,8 @@ Invocation from a class
776776----------------------- 
777777
778778The logic for a dotted lookup such as ``A.x `` is in
779- :meth: `type.__getattribute__ `.  The steps are similar to those for
780- :meth: `object.__getattribute__ ` but the instance dictionary lookup is replaced
779+ :meth: `! type.__getattribute__
780+ :meth: `! object.__getattribute__
781781by a search through the class's :term: `method resolution order `.
782782
783783If a descriptor is found, it is invoked with ``desc.__get__(None, A) ``.
@@ -789,7 +789,7 @@ The full C implementation can be found in :c:func:`!type_getattro` and
789789Invocation from super
790790--------------------- 
791791
792- The logic for super's dotted lookup is in the :meth: `__getattribute__ ` method for
792+ The logic for super's dotted lookup is in the :meth: `~object. __getattribute__
793793object returned by :func: `super `.
794794
795795A dotted lookup such as ``super(A, obj).m `` searches ``obj.__class__.__mro__ ``
@@ -806,21 +806,21 @@ The full C implementation can be found in :c:func:`!super_getattro` in
806806Summary of invocation logic
807807--------------------------- 
808808
809- The mechanism for descriptors is embedded in the :meth: `__getattribute__ `
809+ The mechanism for descriptors is embedded in the :meth: `~object. __getattribute__
810810methods for :class: `object `, :class: `type `, and :func: `super `.
811811
812812The important points to remember are:
813813
814- * Descriptors are invoked by the :meth: `__getattribute__ ` method.
814+ * Descriptors are invoked by the :meth: `~object. __getattribute__
815815
816816* Classes inherit this machinery from :class: `object `, :class: `type `, or
817817  :func: `super `.
818818
819- * Overriding :meth: `__getattribute__ ` prevents automatic descriptor calls
819+ * Overriding :meth: `~object. __getattribute__
820820  because all the descriptor logic is in that method.
821821
822- * :meth: `object.__getattribute__ ` and :meth: `type.__getattribute__ ` make
823-   different calls to :meth: `__get__ `.  The first includes the instance and may
822+ * :meth: `! object.__getattribute__:meth: `! type.__getattribute__
823+   different calls to :meth: `~object. __get__
824824  include the class.  The second puts in ``None `` for the instance and always
825825  includes the class.
826826
@@ -835,16 +835,16 @@ Automatic name notification
835835Sometimes it is desirable for a descriptor to know what class variable name it
836836was assigned to.  When a new class is created, the :class: `type ` metaclass
837837scans the dictionary of the new class.  If any of the entries are descriptors
838- and if they define :meth: `__set_name__ `, that method is called with two
838+ and if they define :meth: `~object. __set_name__
839839arguments.  The *owner * is the class where the descriptor is used, and the
840840*name * is the class variable the descriptor was assigned to.
841841
842842The implementation details are in :c:func: `!type_new ` and
843843:c:func: `!set_names ` in :source: `Objects/typeobject.c `.
844844
845- Since the update logic is in :meth: `type.__new__ `, notifications only take
845+ Since the update logic is in :meth: `! type.__new__
846846place at the time of class creation.  If descriptors are added to the class
847- afterwards, :meth: `__set_name__ ` will need to be called manually.
847+ afterwards, :meth: `~object. __set_name__
848848
849849
850850ORM example
@@ -1187,7 +1187,7 @@ roughly equivalent to:
11871187            return self
11881188
11891189To support automatic creation of methods, functions include the
1190- :meth: `__get__ ` method for binding methods during attribute access.  This
1190+ :meth: `~object. __get__
11911191means that functions are non-data descriptors that return bound methods
11921192during dotted lookup from an instance.  Here's how it works:
11931193
@@ -1231,19 +1231,19 @@ The function has a :term:`qualified name` attribute to support introspection:
12311231    'D.f' 
12321232
12331233Accessing the function through the class dictionary does not invoke
1234- :meth: `__get__ `.  Instead, it just returns the underlying function object::
1234+ :meth: `~object. __get__
12351235
12361236    >>> D.__dict__['f'] 
12371237    <function D.f at 0x00C45070> 
12381238
1239- Dotted access from a class calls :meth: `__get__ ` which just returns the
1239+ Dotted access from a class calls :meth: `~object. __get__
12401240underlying function unchanged::
12411241
12421242    >>> D.f 
12431243    <function D.f at 0x00C45070> 
12441244
12451245The interesting behavior occurs during dotted access from an instance.  The
1246- dotted lookup calls :meth: `__get__ ` which returns a bound method object::
1246+ dotted lookup calls :meth: `~object. __get__
12471247
12481248    >>> d = D() 
12491249    >>> d.f 
@@ -1268,7 +1268,7 @@ Kinds of methods
12681268Non-data descriptors provide a simple mechanism for variations on the usual
12691269patterns of binding functions into methods.
12701270
1271- To recap, functions have a :meth: `__get__ ` method so that they can be converted
1271+ To recap, functions have a :meth: `~object. __get__
12721272to a method when accessed as attributes.  The non-data descriptor transforms an
12731273``obj.f(*args) `` call into ``f(obj, *args) ``.  Calling ``cls.f(*args) ``
12741274becomes ``f(*args) ``.
@@ -1671,7 +1671,7 @@ by member descriptors:
16711671            'Emulate member_repr() in Objects/descrobject.c'
16721672            return f'<Member {self.name!r} of {self.clsname!r}>'
16731673
1674- The :meth: `type.__new__ ` method takes care of adding member objects to class
1674+ The :meth: `! type.__new__
16751675variables:
16761676
16771677.. testcode ::
0 commit comments