[3.14] gh-105812: Use the `:deco:` role in place of manual decorator markup (GH-139619) (#139627)

(cherry picked from commit 3195da0b1a)
This commit is contained in:
Adam Turner 2025-10-07 19:13:35 +01:00 committed by GitHub
parent 04d75658ac
commit b1fa3414b3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 36 additions and 37 deletions

View file

@ -336,7 +336,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. note:: .. note::
In CPython, generator-based coroutines (:term:`generators <generator>` In CPython, generator-based coroutines (:term:`generators <generator>`
decorated with :func:`@types.coroutine <types.coroutine>`) are decorated with :deco:`types.coroutine`) are
*awaitables*, even though they do not have an :meth:`~object.__await__` method. *awaitables*, even though they do not have an :meth:`~object.__await__` method.
Using ``isinstance(gencoro, Awaitable)`` for them will return ``False``. Using ``isinstance(gencoro, Awaitable)`` for them will return ``False``.
Use :func:`inspect.isawaitable` to detect them. Use :func:`inspect.isawaitable` to detect them.
@ -354,7 +354,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. note:: .. note::
In CPython, generator-based coroutines (:term:`generators <generator>` In CPython, generator-based coroutines (:term:`generators <generator>`
decorated with :func:`@types.coroutine <types.coroutine>`) are decorated with :deco:`types.coroutine`) are
*awaitables*, even though they do not have an :meth:`~object.__await__` method. *awaitables*, even though they do not have an :meth:`~object.__await__` method.
Using ``isinstance(gencoro, Coroutine)`` for them will return ``False``. Using ``isinstance(gencoro, Coroutine)`` for them will return ``False``.
Use :func:`inspect.isawaitable` to detect them. Use :func:`inspect.isawaitable` to detect them.

View file

@ -317,7 +317,7 @@ Module contents
:func:`!field`, then the class attribute for this field will be :func:`!field`, then the class attribute for this field will be
replaced by the specified *default* value. If *default* is not replaced by the specified *default* value. If *default* is not
provided, then the class attribute will be deleted. The intent is provided, then the class attribute will be deleted. The intent is
that after the :func:`@dataclass <dataclass>` decorator runs, the class that after the :deco:`dataclass` decorator runs, the class
attributes will all contain the default values for the fields, just attributes will all contain the default values for the fields, just
as if the default value itself were specified. For example, as if the default value itself were specified. For example,
after:: after::
@ -427,7 +427,7 @@ Module contents
:data:`typing.Any` is used for ``type``. The values of *init*, :data:`typing.Any` is used for ``type``. The values of *init*,
*repr*, *eq*, *order*, *unsafe_hash*, *frozen*, *repr*, *eq*, *order*, *unsafe_hash*, *frozen*,
*match_args*, *kw_only*, *slots*, and *weakref_slot* have *match_args*, *kw_only*, *slots*, and *weakref_slot* have
the same meaning as they do in :func:`@dataclass <dataclass>`. the same meaning as they do in :deco:`dataclass`.
If *module* is defined, the :attr:`!__module__` attribute If *module* is defined, the :attr:`!__module__` attribute
of the dataclass is set to that value. of the dataclass is set to that value.
@ -435,12 +435,12 @@ Module contents
The *decorator* parameter is a callable that will be used to create the dataclass. The *decorator* parameter is a callable that will be used to create the dataclass.
It should take the class object as a first argument and the same keyword arguments It should take the class object as a first argument and the same keyword arguments
as :func:`@dataclass <dataclass>`. By default, the :func:`@dataclass <dataclass>` as :deco:`dataclass`. By default, the :deco:`dataclass`
function is used. function is used.
This function is not strictly required, because any Python This function is not strictly required, because any Python
mechanism for creating a new class with :attr:`~object.__annotations__` can mechanism for creating a new class with :attr:`~object.__annotations__` can
then apply the :func:`@dataclass <dataclass>` function to convert that class to then apply the :deco:`dataclass` function to convert that class to
a dataclass. This function is provided as a convenience. For a dataclass. This function is provided as a convenience. For
example:: example::
@ -569,7 +569,7 @@ Post-init processing
def __post_init__(self): def __post_init__(self):
self.c = self.a + self.b self.c = self.a + self.b
The :meth:`~object.__init__` method generated by :func:`@dataclass <dataclass>` does not call base The :meth:`~object.__init__` method generated by :deco:`dataclass` does not call base
class :meth:`!__init__` methods. If the base class has an :meth:`!__init__` method class :meth:`!__init__` methods. If the base class has an :meth:`!__init__` method
that has to be called, it is common to call this method in a that has to be called, it is common to call this method in a
:meth:`__post_init__` method:: :meth:`__post_init__` method::
@ -599,7 +599,7 @@ parameters to :meth:`!__post_init__`. Also see the warning about how
Class variables Class variables
--------------- ---------------
One of the few places where :func:`@dataclass <dataclass>` actually inspects the type One of the few places where :deco:`dataclass` actually inspects the type
of a field is to determine if a field is a class variable as defined of a field is to determine if a field is a class variable as defined
in :pep:`526`. It does this by checking if the type of the field is in :pep:`526`. It does this by checking if the type of the field is
:data:`typing.ClassVar`. If a field is a ``ClassVar``, it is excluded :data:`typing.ClassVar`. If a field is a ``ClassVar``, it is excluded
@ -612,7 +612,7 @@ module-level :func:`fields` function.
Init-only variables Init-only variables
------------------- -------------------
Another place where :func:`@dataclass <dataclass>` inspects a type annotation is to Another place where :deco:`dataclass` inspects a type annotation is to
determine if a field is an init-only variable. It does this by seeing determine if a field is an init-only variable. It does this by seeing
if the type of a field is of type :class:`InitVar`. If a field if the type of a field is of type :class:`InitVar`. If a field
is an :class:`InitVar`, it is considered a pseudo-field called an init-only is an :class:`InitVar`, it is considered a pseudo-field called an init-only
@ -646,7 +646,7 @@ Frozen instances
---------------- ----------------
It is not possible to create truly immutable Python objects. However, It is not possible to create truly immutable Python objects. However,
by passing ``frozen=True`` to the :func:`@dataclass <dataclass>` decorator you can by passing ``frozen=True`` to the :deco:`dataclass` decorator you can
emulate immutability. In that case, dataclasses will add emulate immutability. In that case, dataclasses will add
:meth:`~object.__setattr__` and :meth:`~object.__delattr__` methods to the class. These :meth:`~object.__setattr__` and :meth:`~object.__delattr__` methods to the class. These
methods will raise a :exc:`FrozenInstanceError` when invoked. methods will raise a :exc:`FrozenInstanceError` when invoked.
@ -662,7 +662,7 @@ must use :meth:`!object.__setattr__`.
Inheritance Inheritance
----------- -----------
When the dataclass is being created by the :func:`@dataclass <dataclass>` decorator, When the dataclass is being created by the :deco:`dataclass` decorator,
it looks through all of the class's base classes in reverse MRO (that it looks through all of the class's base classes in reverse MRO (that
is, starting at :class:`object`) and, for each dataclass that it finds, is, starting at :class:`object`) and, for each dataclass that it finds,
adds the fields from that base class to an ordered mapping of fields. adds the fields from that base class to an ordered mapping of fields.
@ -786,7 +786,7 @@ for :attr:`!x` when creating a class instance will share the same copy
of :attr:`!x`. Because dataclasses just use normal Python class of :attr:`!x`. Because dataclasses just use normal Python class
creation they also share this behavior. There is no general way creation they also share this behavior. There is no general way
for Data Classes to detect this condition. Instead, the for Data Classes to detect this condition. Instead, the
:func:`@dataclass <dataclass>` decorator will raise a :exc:`ValueError` if it :deco:`dataclass` decorator will raise a :exc:`ValueError` if it
detects an unhashable default parameter. The assumption is that if detects an unhashable default parameter. The assumption is that if
a value is unhashable, it is mutable. This is a partial solution, a value is unhashable, it is mutable. This is a partial solution,
but it does protect against many common errors. but it does protect against many common errors.
@ -820,7 +820,7 @@ default value have the following special behaviors:
:meth:`~object.__get__` or :meth:`!__set__` method is called rather than returning or :meth:`~object.__get__` or :meth:`!__set__` method is called rather than returning or
overwriting the descriptor object. overwriting the descriptor object.
* To determine whether a field contains a default value, :func:`@dataclass <dataclass>` * To determine whether a field contains a default value, :deco:`dataclass`
will call the descriptor's :meth:`!__get__` method using its class access will call the descriptor's :meth:`!__get__` method using its class access
form: ``descriptor.__get__(obj=None, type=cls)``. If the form: ``descriptor.__get__(obj=None, type=cls)``. If the
descriptor returns a value in this case, it will be used as the descriptor returns a value in this case, it will be used as the

View file

@ -690,7 +690,7 @@ The :mod:`functools` module defines the following functions:
return not arg return not arg
``@singledispatchmethod`` supports nesting with other decorators such as ``@singledispatchmethod`` supports nesting with other decorators such as
:func:`@classmethod<classmethod>`. Note that to allow for :deco:`classmethod`. Note that to allow for
``dispatcher.register``, ``singledispatchmethod`` must be the *outer most* ``dispatcher.register``, ``singledispatchmethod`` must be the *outer most*
decorator. Here is the ``Negator`` class with the ``neg`` methods bound to decorator. Here is the ``Negator`` class with the ``neg`` methods bound to
the class, rather than an instance of the class:: the class, rather than an instance of the class::
@ -712,8 +712,7 @@ The :mod:`functools` module defines the following functions:
return not arg return not arg
The same pattern can be used for other similar decorators: The same pattern can be used for other similar decorators:
:func:`@staticmethod<staticmethod>`, :deco:`staticmethod`, :deco:`~abc.abstractmethod`, and others.
:func:`@abstractmethod<abc.abstractmethod>`, and others.
.. versionadded:: 3.8 .. versionadded:: 3.8

View file

@ -1390,7 +1390,7 @@ These can be used as types in annotations. They all support subscription using
Using ``Annotated[T, x]`` as an annotation still allows for static Using ``Annotated[T, x]`` as an annotation still allows for static
typechecking of ``T``, as type checkers will simply ignore the metadata ``x``. typechecking of ``T``, as type checkers will simply ignore the metadata ``x``.
In this way, ``Annotated`` differs from the In this way, ``Annotated`` differs from the
:func:`@no_type_check <no_type_check>` decorator, which can also be used for :deco:`no_type_check` decorator, which can also be used for
adding annotations outside the scope of the typing system, but adding annotations outside the scope of the typing system, but
completely disables typechecking for a function or class. completely disables typechecking for a function or class.
@ -2835,7 +2835,7 @@ Protocols
--------- ---------
The following protocols are provided by the :mod:`!typing` module. All are decorated The following protocols are provided by the :mod:`!typing` module. All are decorated
with :func:`@runtime_checkable <runtime_checkable>`. with :deco:`runtime_checkable`.
.. class:: SupportsAbs .. class:: SupportsAbs
@ -3016,7 +3016,7 @@ Functions and decorators
The presence of ``@dataclass_transform()`` tells a static type checker that the The presence of ``@dataclass_transform()`` tells a static type checker that the
decorated object performs runtime "magic" that decorated object performs runtime "magic" that
transforms a class in a similar way to transforms a class in a similar way to
:func:`@dataclasses.dataclass <dataclasses.dataclass>`. :deco:`dataclasses.dataclass`.
Example usage with a decorator function: Example usage with a decorator function:
@ -3054,14 +3054,14 @@ Functions and decorators
The ``CustomerModel`` classes defined above will The ``CustomerModel`` classes defined above will
be treated by type checkers similarly to classes created with be treated by type checkers similarly to classes created with
:func:`@dataclasses.dataclass <dataclasses.dataclass>`. :deco:`dataclasses.dataclass`.
For example, type checkers will assume these classes have For example, type checkers will assume these classes have
``__init__`` methods that accept ``id`` and ``name``. ``__init__`` methods that accept ``id`` and ``name``.
The decorated class, metaclass, or function may accept the following bool The decorated class, metaclass, or function may accept the following bool
arguments which type checkers will assume have the same effect as they arguments which type checkers will assume have the same effect as they
would have on the would have on the
:func:`@dataclasses.dataclass<dataclasses.dataclass>` decorator: ``init``, :deco:`dataclasses.dataclass` decorator: ``init``,
``eq``, ``order``, ``unsafe_hash``, ``frozen``, ``match_args``, ``eq``, ``order``, ``unsafe_hash``, ``frozen``, ``match_args``,
``kw_only``, and ``slots``. It must be possible for the value of these ``kw_only``, and ``slots``. It must be possible for the value of these
arguments (``True`` or ``False``) to be statically evaluated. arguments (``True`` or ``False``) to be statically evaluated.
@ -3189,12 +3189,12 @@ Functions and decorators
.. function:: get_overloads(func) .. function:: get_overloads(func)
Return a sequence of :func:`@overload <overload>`-decorated definitions for Return a sequence of :deco:`overload`-decorated definitions for
*func*. *func*.
*func* is the function object for the implementation of the *func* is the function object for the implementation of the
overloaded function. For example, given the definition of ``process`` in overloaded function. For example, given the definition of ``process`` in
the documentation for :func:`@overload <overload>`, the documentation for :deco:`overload`,
``get_overloads(process)`` will return a sequence of three function objects ``get_overloads(process)`` will return a sequence of three function objects
for the three defined overloads. If called on a function with no overloads, for the three defined overloads. If called on a function with no overloads,
``get_overloads()`` returns an empty sequence. ``get_overloads()`` returns an empty sequence.
@ -3351,7 +3351,7 @@ Introspection helpers
If *globalns* or *localns* is not given, appropriate namespace If *globalns* or *localns* is not given, appropriate namespace
dictionaries are inferred from *obj*. dictionaries are inferred from *obj*.
* ``None`` is replaced with :class:`types.NoneType`. * ``None`` is replaced with :class:`types.NoneType`.
* If :func:`@no_type_check <no_type_check>` has been applied to *obj*, an * If :deco:`no_type_check` has been applied to *obj*, an
empty dictionary is returned. empty dictionary is returned.
* If *obj* is a class ``C``, the function returns a dictionary that merges * If *obj* is a class ``C``, the function returns a dictionary that merges
annotations from ``C``'s base classes with those on ``C`` directly. This annotations from ``C``'s base classes with those on ``C`` directly. This

View file

@ -586,7 +586,7 @@ Available Functions
The deprecation message passed to the decorator is saved in the The deprecation message passed to the decorator is saved in the
``__deprecated__`` attribute on the decorated object. ``__deprecated__`` attribute on the decorated object.
If applied to an overload, the decorator If applied to an overload, the decorator
must be after the :func:`@overload <typing.overload>` decorator must be after the :deco:`~typing.overload` decorator
for the attribute to exist on the overload as returned by for the attribute to exist on the overload as returned by
:func:`typing.get_overloads`. :func:`typing.get_overloads`.

View file

@ -2558,7 +2558,7 @@ instance dictionary. In contrast, non-data descriptors can be overridden by
instances. instances.
Python methods (including those decorated with Python methods (including those decorated with
:func:`@staticmethod <staticmethod>` and :func:`@classmethod <classmethod>`) are :deco:`staticmethod` and :deco:`classmethod`) are
implemented as non-data descriptors. Accordingly, instances can redefine and implemented as non-data descriptors. Accordingly, instances can redefine and
override methods. This allows individual instances to acquire behaviors that override methods. This allows individual instances to acquire behaviors that
differ from other instances of the same class. differ from other instances of the same class.
@ -2991,7 +2991,7 @@ class method ``__class_getitem__()``.
When defined on a class, ``__class_getitem__()`` is automatically a class When defined on a class, ``__class_getitem__()`` is automatically a class
method. As such, there is no need for it to be decorated with method. As such, there is no need for it to be decorated with
:func:`@classmethod<classmethod>` when it is defined. :deco:`classmethod` when it is defined.
The purpose of *__class_getitem__* The purpose of *__class_getitem__*

View file

@ -858,8 +858,8 @@ Some smaller changes made to the core Python language are:
.. XXX bytearray doesn't seem to be documented .. XXX bytearray doesn't seem to be documented
* When using :class:`@classmethod <classmethod>` and * When using :deco:`classmethod` and
:class:`@staticmethod <staticmethod>` to wrap :deco:`staticmethod` to wrap
methods as class or static methods, the wrapper object now methods as class or static methods, the wrapper object now
exposes the wrapped function as their :attr:`~method.__func__` exposes the wrapped function as their :attr:`~method.__func__`
attribute. attribute.

View file

@ -847,8 +847,8 @@ Other Language Changes
respectively. respectively.
(Contributed by Joshua Bronson, Daniel Pope, and Justin Wang in :issue:`31861`.) (Contributed by Joshua Bronson, Daniel Pope, and Justin Wang in :issue:`31861`.)
* Static methods (:func:`@staticmethod <staticmethod>`) and class methods * Static methods (:deco:`staticmethod`) and class methods
(:func:`@classmethod <classmethod>`) now inherit the method attributes (:deco:`classmethod`) now inherit the method attributes
(``__module__``, ``__name__``, ``__qualname__``, ``__doc__``, (``__module__``, ``__name__``, ``__qualname__``, ``__doc__``,
``__annotations__``) and have a new ``__wrapped__`` attribute. ``__annotations__``) and have a new ``__wrapped__`` attribute.
Moreover, static methods are now callable as regular functions. Moreover, static methods are now callable as regular functions.

View file

@ -402,8 +402,8 @@ the heap. Should speed up dispatch in the interpreter.
.. nonce: eUn4p5 .. nonce: eUn4p5
.. section: Core and Builtins .. section: Core and Builtins
Static methods (:func:`@staticmethod <staticmethod>`) and class methods Static methods (:deco:`staticmethod`) and class methods
(:func:`@classmethod <classmethod>`) now inherit the method attributes (:deco:`classmethod`) now inherit the method attributes
(``__module__``, ``__name__``, ``__qualname__``, ``__doc__``, (``__module__``, ``__name__``, ``__qualname__``, ``__doc__``,
``__annotations__``) and have a new ``__wrapped__`` attribute. Patch by ``__annotations__``) and have a new ``__wrapped__`` attribute. Patch by
Victor Stinner. Victor Stinner.
@ -454,7 +454,7 @@ file locations.
.. nonce: VSF3vg .. nonce: VSF3vg
.. section: Core and Builtins .. section: Core and Builtins
Static methods (:func:`@staticmethod <staticmethod>`) are now callable as Static methods (:deco:`staticmethod`) are now callable as
regular functions. Patch by Victor Stinner. regular functions. Patch by Victor Stinner.
.. ..

View file

@ -2953,7 +2953,7 @@ support for Metadata 2.2.
.. nonce: xTUyyX .. nonce: xTUyyX
.. section: Library .. section: Library
Remove the :func:`@asyncio.coroutine <asyncio.coroutine>` :term:`decorator` Remove the :deco:`asyncio.coroutine` :term:`decorator`
enabling legacy generator-based coroutines to be compatible with async/await enabling legacy generator-based coroutines to be compatible with async/await
code; remove :class:`asyncio.coroutines.CoroWrapper` used for wrapping code; remove :class:`asyncio.coroutines.CoroWrapper` used for wrapping
legacy coroutine objects in the debug mode. The decorator has been legacy coroutine objects in the debug mode. The decorator has been

View file

@ -664,7 +664,7 @@ for :func:`os.fcopyfile` available in macOs.
.. nonce: l1p7CJ .. nonce: l1p7CJ
.. section: Library .. section: Library
For :func:`@dataclass <dataclasses.dataclass>`, add *weakref_slot*. For :deco:`~dataclasses.dataclass`, add *weakref_slot*.
The new parameter defaults to ``False``. If true, and if The new parameter defaults to ``False``. If true, and if
``slots=True``, add a slot named ``"__weakref__"``, which will allow instances to be ``slots=True``, add a slot named ``"__weakref__"``, which will allow instances to be
weakref'd. Contributed by Eric V. Smith weakref'd. Contributed by Eric V. Smith

View file

@ -1999,7 +1999,7 @@ with an escape character.
.. nonce: vi2bP- .. nonce: vi2bP-
.. section: Library .. section: Library
:func:`@warnings.deprecated <warnings.deprecated>` now copies the coroutine :deco:`warnings.deprecated` now copies the coroutine
status of functions and methods so that :func:`inspect.iscoroutinefunction` status of functions and methods so that :func:`inspect.iscoroutinefunction`
returns the correct result. returns the correct result.