Skip to content

Commit e61ac8d

Browse files
committed
gh-101100: Add a table of class attributes to the "Custom classes" section of the data model docs
1 parent e256a75 commit e61ac8d

37 files changed

+239
-195
lines changed

Doc/c-api/exceptions.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ Exception Classes
733733
This creates a class object derived from :exc:`Exception` (accessible in C as
734734
:c:data:`PyExc_Exception`).
735735
736-
The :attr:`!__module__` attribute of the new class is set to the first part (up
736+
The :attr:`~class.__module__` attribute of the new class is set to the first part (up
737737
to the last dot) of the *name* argument, and the class name is set to the last
738738
part (after the last dot). The *base* argument can be used to specify alternate
739739
base classes; it can either be only one class or a tuple of classes. The *dict*

Doc/c-api/object.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ Object Protocol
370370
If *cls* has a :meth:`~class.__subclasscheck__` method, it will be called to
371371
determine the subclass status as described in :pep:`3119`. Otherwise,
372372
*derived* is a subclass of *cls* if it is a direct or indirect subclass,
373-
i.e. contained in ``cls.__mro__``.
373+
i.e. contained in :attr:`cls.__mro__ <class.__mro__>`.
374374
375375
Normally only class objects, i.e. instances of :class:`type` or a derived
376376
class, are considered classes. However, objects can override this by having

Doc/c-api/type.rst

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ Type Objects
5353
.. c:function:: PyObject* PyType_GetDict(PyTypeObject* type)
5454
5555
Return the type object's internal namespace, which is otherwise only
56-
exposed via a read-only proxy (``cls.__dict__``). This is a
56+
exposed via a read-only proxy (:attr:`cls.__dict__ <class.__dict__>`).
57+
This is a
5758
replacement for accessing :c:member:`~PyTypeObject.tp_dict` directly.
5859
The returned dictionary must be treated as read-only.
5960
@@ -174,29 +175,32 @@ Type Objects
174175
175176
.. c:function:: PyObject* PyType_GetName(PyTypeObject *type)
176177
177-
Return the type's name. Equivalent to getting the type's ``__name__`` attribute.
178+
Return the type's name. Equivalent to getting the type's
179+
:attr:`~class.__name__` attribute.
178180
179181
.. versionadded:: 3.11
180182
181183
.. c:function:: PyObject* PyType_GetQualName(PyTypeObject *type)
182184
183185
Return the type's qualified name. Equivalent to getting the
184-
type's ``__qualname__`` attribute.
186+
type's :attr:`~class.__qualname__` attribute.
185187
186188
.. versionadded:: 3.11
187189
188190
.. c:function:: PyObject* PyType_GetFullyQualifiedName(PyTypeObject *type)
189191
190192
Return the type's fully qualified name. Equivalent to
191-
``f"{type.__module__}.{type.__qualname__}"``, or ``type.__qualname__`` if
192-
``type.__module__`` is not a string or is equal to ``"builtins"``.
193+
``f"{type.__module__}.{type.__qualname__}"``, or
194+
:attr:`type.__qualname__ <class.__qualname__>` if
195+
:attr:`type.__module__ <class.__module__>` is not a string or is equal to
196+
``"builtins"``.
193197
194198
.. versionadded:: 3.13
195199
196200
.. c:function:: PyObject* PyType_GetModuleName(PyTypeObject *type)
197201
198-
Return the type's module name. Equivalent to getting the ``type.__module__``
199-
attribute.
202+
Return the type's module name. Equivalent to getting the
203+
:attr:`type.__module__ <class.__module__>` attribute.
200204
201205
.. versionadded:: 3.13
202206

Doc/c-api/typeobj.rst

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -567,12 +567,12 @@ and :c:data:`PyType_Type` effectively act as defaults.)
567567

568568
For :ref:`statically allocated type objects <static-types>`,
569569
the *tp_name* field should contain a dot.
570-
Everything before the last dot is made accessible as the :attr:`__module__`
570+
Everything before the last dot is made accessible as the :attr:`~class.__module__`
571571
attribute, and everything after the last dot is made accessible as the
572-
:attr:`~definition.__name__` attribute.
572+
:attr:`~class.__name__` attribute.
573573

574574
If no dot is present, the entire :c:member:`~PyTypeObject.tp_name` field is made accessible as the
575-
:attr:`~definition.__name__` attribute, and the :attr:`__module__` attribute is undefined
575+
:attr:`~class.__name__` attribute, and the :attr:`~class.__module__` attribute is undefined
576576
(unless explicitly set in the dictionary, as explained above). This means your
577577
type will be impossible to pickle. Additionally, it will not be listed in
578578
module documentations created with pydoc.
@@ -1131,7 +1131,7 @@ and :c:data:`PyType_Type` effectively act as defaults.)
11311131

11321132
.. c:macro:: Py_TPFLAGS_MANAGED_DICT
11331133
1134-
This bit indicates that instances of the class have a ``__dict__``
1134+
This bit indicates that instances of the class have a `~object.__dict__`
11351135
attribute, and that the space for the dictionary is managed by the VM.
11361136

11371137
If this flag is set, :c:macro:`Py_TPFLAGS_HAVE_GC` should also be set.
@@ -1335,8 +1335,8 @@ and :c:data:`PyType_Type` effectively act as defaults.)
13351335
.. c:member:: const char* PyTypeObject.tp_doc
13361336
13371337
An optional pointer to a NUL-terminated C string giving the docstring for this
1338-
type object. This is exposed as the :attr:`__doc__` attribute on the type and
1339-
instances of the type.
1338+
type object. This is exposed as the :attr:`~class.__doc__` attribute on the
1339+
type and instances of the type.
13401340

13411341
**Inheritance:**
13421342

Doc/extending/newtypes.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ An interesting advantage of using the :c:member:`~PyTypeObject.tp_members` table
296296
descriptors that are used at runtime is that any attribute defined this way can
297297
have an associated doc string simply by providing the text in the table. An
298298
application can use the introspection API to retrieve the descriptor from the
299-
class object, and get the doc string using its :attr:`!__doc__` attribute.
299+
class object, and get the doc string using its :attr:`~class.__doc__` attribute.
300300

301301
As with the :c:member:`~PyTypeObject.tp_methods` table, a sentinel entry with a :c:member:`~PyMethodDef.ml_name` value
302302
of ``NULL`` is required.

Doc/faq/programming.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1614,7 +1614,7 @@ method too, and it must do so carefully. The basic implementation of
16141614
...
16151615

16161616
Most :meth:`!__setattr__` implementations must modify
1617-
:meth:`self.__dict__ <object.__dict__>` to store
1617+
:attr:`self.__dict__ <object.__dict__>` to store
16181618
local state for self without causing an infinite recursion.
16191619

16201620

Doc/glossary.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ Glossary
347347
docstring
348348
A string literal which appears as the first expression in a class,
349349
function or module. While ignored when the suite is executed, it is
350-
recognized by the compiler and put into the :attr:`!__doc__` attribute
350+
recognized by the compiler and put into the :attr:`~definition.__doc__` attribute
351351
of the enclosing class, function or module. Since it is available via
352352
introspection, it is the canonical place for documentation of the
353353
object.

Doc/howto/annotations.rst

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,9 @@ Your code will have to have a separate code path if the object
107107
you're examining is a class (``isinstance(o, type)``).
108108
In that case, best practice relies on an implementation detail
109109
of Python 3.9 and before: if a class has annotations defined,
110-
they are stored in the class's ``__dict__`` dictionary. Since
110+
they are stored in the class's :attr:`~class.__dict__` dictionary. Since
111111
the class may or may not have annotations defined, best practice
112-
is to call the ``get`` method on the class dict.
112+
is to call the :meth:`~dict.get` method on the class dict.
113113

114114
To put it all together, here is some sample code that safely
115115
accesses the ``__annotations__`` attribute on an arbitrary
@@ -126,8 +126,8 @@ the type of ``ann`` using :func:`isinstance` before further
126126
examination.
127127

128128
Note that some exotic or malformed type objects may not have
129-
a ``__dict__`` attribute, so for extra safety you may also wish
130-
to use :func:`getattr` to access ``__dict__``.
129+
a :attr:`~class.__dict__` attribute, so for extra safety you may also wish
130+
to use :func:`getattr` to access :attr:`!__dict__`.
131131

132132

133133
Manually Un-Stringizing Stringized Annotations
@@ -247,4 +247,5 @@ on the class, you may observe unexpected behavior; see
247247
quirks by using :func:`annotationlib.get_annotations` on Python 3.14+ or
248248
:func:`inspect.get_annotations` on Python 3.10+. On earlier versions of
249249
Python, you can avoid these bugs by accessing the annotations from the
250-
class's ``__dict__`` (e.g., ``cls.__dict__.get('__annotations__', None)``).
250+
class's :attr:`~class.__dict__`
251+
(e.g., ``cls.__dict__.get('__annotations__', None)``).

Doc/howto/descriptor.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -562,8 +562,8 @@ attribute access.
562562

563563
The expression ``obj.x`` looks up the attribute ``x`` in the chain of
564564
namespaces for ``obj``. If the search finds a descriptor outside of the
565-
instance ``__dict__``, its :meth:`__get__` method is invoked according to the
566-
precedence rules listed below.
565+
instance :attr:`~object.__dict__`, its :meth:`~object.__get__` method is
566+
invoked according to the precedence rules listed below.
567567

568568
The details of invocation depend on whether ``obj`` is an object, class, or
569569
instance of super.

Doc/howto/enum.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ The solution is to specify the module name explicitly as follows::
608608
the source, pickling will be disabled.
609609

610610
The new pickle protocol 4 also, in some circumstances, relies on
611-
:attr:`~definition.__qualname__` being set to the location where pickle will be able
611+
:attr:`~class.__qualname__` being set to the location where pickle will be able
612612
to find the class. For example, if the class was made available in class
613613
SomeData in the global scope::
614614

0 commit comments

Comments
 (0)