mirror of https://github.com/python/cpython
gh-101100: Add a table of class attributes to the "Custom classes" section of the data model docs (#124480)
This commit is contained in:
parent
6318ffcba2
commit
0d9d56c4e4
|
@ -733,7 +733,7 @@ Exception Classes
|
||||||
This creates a class object derived from :exc:`Exception` (accessible in C as
|
This creates a class object derived from :exc:`Exception` (accessible in C as
|
||||||
:c:data:`PyExc_Exception`).
|
:c:data:`PyExc_Exception`).
|
||||||
|
|
||||||
The :attr:`!__module__` attribute of the new class is set to the first part (up
|
The :attr:`~type.__module__` attribute of the new class is set to the first part (up
|
||||||
to the last dot) of the *name* argument, and the class name is set to the last
|
to the last dot) of the *name* argument, and the class name is set to the last
|
||||||
part (after the last dot). The *base* argument can be used to specify alternate
|
part (after the last dot). The *base* argument can be used to specify alternate
|
||||||
base classes; it can either be only one class or a tuple of classes. The *dict*
|
base classes; it can either be only one class or a tuple of classes. The *dict*
|
||||||
|
|
|
@ -367,14 +367,14 @@ Object Protocol
|
||||||
The result will be ``1`` when at least one of the checks returns ``1``,
|
The result will be ``1`` when at least one of the checks returns ``1``,
|
||||||
otherwise it will be ``0``.
|
otherwise it will be ``0``.
|
||||||
|
|
||||||
If *cls* has a :meth:`~class.__subclasscheck__` method, it will be called to
|
If *cls* has a :meth:`~type.__subclasscheck__` method, it will be called to
|
||||||
determine the subclass status as described in :pep:`3119`. Otherwise,
|
determine the subclass status as described in :pep:`3119`. Otherwise,
|
||||||
*derived* is a subclass of *cls* if it is a direct or indirect subclass,
|
*derived* is a subclass of *cls* if it is a direct or indirect subclass,
|
||||||
i.e. contained in ``cls.__mro__``.
|
i.e. contained in :attr:`cls.__mro__ <type.__mro__>`.
|
||||||
|
|
||||||
Normally only class objects, i.e. instances of :class:`type` or a derived
|
Normally only class objects, i.e. instances of :class:`type` or a derived
|
||||||
class, are considered classes. However, objects can override this by having
|
class, are considered classes. However, objects can override this by having
|
||||||
a :attr:`~class.__bases__` attribute (which must be a tuple of base classes).
|
a :attr:`~type.__bases__` attribute (which must be a tuple of base classes).
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: int PyObject_IsInstance(PyObject *inst, PyObject *cls)
|
.. c:function:: int PyObject_IsInstance(PyObject *inst, PyObject *cls)
|
||||||
|
@ -386,15 +386,15 @@ Object Protocol
|
||||||
The result will be ``1`` when at least one of the checks returns ``1``,
|
The result will be ``1`` when at least one of the checks returns ``1``,
|
||||||
otherwise it will be ``0``.
|
otherwise it will be ``0``.
|
||||||
|
|
||||||
If *cls* has a :meth:`~class.__instancecheck__` method, it will be called to
|
If *cls* has a :meth:`~type.__instancecheck__` method, it will be called to
|
||||||
determine the subclass status as described in :pep:`3119`. Otherwise, *inst*
|
determine the subclass status as described in :pep:`3119`. Otherwise, *inst*
|
||||||
is an instance of *cls* if its class is a subclass of *cls*.
|
is an instance of *cls* if its class is a subclass of *cls*.
|
||||||
|
|
||||||
An instance *inst* can override what is considered its class by having a
|
An instance *inst* can override what is considered its class by having a
|
||||||
:attr:`~instance.__class__` attribute.
|
:attr:`~object.__class__` attribute.
|
||||||
|
|
||||||
An object *cls* can override if it is considered a class, and what its base
|
An object *cls* can override if it is considered a class, and what its base
|
||||||
classes are, by having a :attr:`~class.__bases__` attribute (which must be a tuple
|
classes are, by having a :attr:`~type.__bases__` attribute (which must be a tuple
|
||||||
of base classes).
|
of base classes).
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,8 @@ Type Objects
|
||||||
.. c:function:: PyObject* PyType_GetDict(PyTypeObject* type)
|
.. c:function:: PyObject* PyType_GetDict(PyTypeObject* type)
|
||||||
|
|
||||||
Return the type object's internal namespace, which is otherwise only
|
Return the type object's internal namespace, which is otherwise only
|
||||||
exposed via a read-only proxy (``cls.__dict__``). This is a
|
exposed via a read-only proxy (:attr:`cls.__dict__ <type.__dict__>`).
|
||||||
|
This is a
|
||||||
replacement for accessing :c:member:`~PyTypeObject.tp_dict` directly.
|
replacement for accessing :c:member:`~PyTypeObject.tp_dict` directly.
|
||||||
The returned dictionary must be treated as read-only.
|
The returned dictionary must be treated as read-only.
|
||||||
|
|
||||||
|
@ -140,7 +141,7 @@ Type Objects
|
||||||
Return true if *a* is a subtype of *b*.
|
Return true if *a* is a subtype of *b*.
|
||||||
|
|
||||||
This function only checks for actual subtypes, which means that
|
This function only checks for actual subtypes, which means that
|
||||||
:meth:`~class.__subclasscheck__` is not called on *b*. Call
|
:meth:`~type.__subclasscheck__` is not called on *b*. Call
|
||||||
:c:func:`PyObject_IsSubclass` to do the same check that :func:`issubclass`
|
:c:func:`PyObject_IsSubclass` to do the same check that :func:`issubclass`
|
||||||
would do.
|
would do.
|
||||||
|
|
||||||
|
@ -174,29 +175,30 @@ Type Objects
|
||||||
|
|
||||||
.. c:function:: PyObject* PyType_GetName(PyTypeObject *type)
|
.. c:function:: PyObject* PyType_GetName(PyTypeObject *type)
|
||||||
|
|
||||||
Return the type's name. Equivalent to getting the type's ``__name__`` attribute.
|
Return the type's name. Equivalent to getting the type's
|
||||||
|
:attr:`~type.__name__` attribute.
|
||||||
|
|
||||||
.. versionadded:: 3.11
|
.. versionadded:: 3.11
|
||||||
|
|
||||||
.. c:function:: PyObject* PyType_GetQualName(PyTypeObject *type)
|
.. c:function:: PyObject* PyType_GetQualName(PyTypeObject *type)
|
||||||
|
|
||||||
Return the type's qualified name. Equivalent to getting the
|
Return the type's qualified name. Equivalent to getting the
|
||||||
type's ``__qualname__`` attribute.
|
type's :attr:`~type.__qualname__` attribute.
|
||||||
|
|
||||||
.. versionadded:: 3.11
|
.. versionadded:: 3.11
|
||||||
|
|
||||||
.. c:function:: PyObject* PyType_GetFullyQualifiedName(PyTypeObject *type)
|
.. c:function:: PyObject* PyType_GetFullyQualifiedName(PyTypeObject *type)
|
||||||
|
|
||||||
Return the type's fully qualified name. Equivalent to
|
Return the type's fully qualified name. Equivalent to
|
||||||
``f"{type.__module__}.{type.__qualname__}"``, or ``type.__qualname__`` if
|
``f"{type.__module__}.{type.__qualname__}"``, or :attr:`type.__qualname__`
|
||||||
``type.__module__`` is not a string or is equal to ``"builtins"``.
|
if :attr:`type.__module__` is not a string or is equal to ``"builtins"``.
|
||||||
|
|
||||||
.. versionadded:: 3.13
|
.. versionadded:: 3.13
|
||||||
|
|
||||||
.. c:function:: PyObject* PyType_GetModuleName(PyTypeObject *type)
|
.. c:function:: PyObject* PyType_GetModuleName(PyTypeObject *type)
|
||||||
|
|
||||||
Return the type's module name. Equivalent to getting the ``type.__module__``
|
Return the type's module name. Equivalent to getting the
|
||||||
attribute.
|
:attr:`type.__module__` attribute.
|
||||||
|
|
||||||
.. versionadded:: 3.13
|
.. versionadded:: 3.13
|
||||||
|
|
||||||
|
|
|
@ -567,12 +567,12 @@ and :c:data:`PyType_Type` effectively act as defaults.)
|
||||||
|
|
||||||
For :ref:`statically allocated type objects <static-types>`,
|
For :ref:`statically allocated type objects <static-types>`,
|
||||||
the *tp_name* field should contain a dot.
|
the *tp_name* field should contain a dot.
|
||||||
Everything before the last dot is made accessible as the :attr:`__module__`
|
Everything before the last dot is made accessible as the :attr:`~type.__module__`
|
||||||
attribute, and everything after the last dot is made accessible as the
|
attribute, and everything after the last dot is made accessible as the
|
||||||
:attr:`~definition.__name__` attribute.
|
:attr:`~type.__name__` attribute.
|
||||||
|
|
||||||
If no dot is present, the entire :c:member:`~PyTypeObject.tp_name` field is made accessible as the
|
If no dot is present, the entire :c:member:`~PyTypeObject.tp_name` field is made accessible as the
|
||||||
:attr:`~definition.__name__` attribute, and the :attr:`__module__` attribute is undefined
|
:attr:`~type.__name__` attribute, and the :attr:`~type.__module__` attribute is undefined
|
||||||
(unless explicitly set in the dictionary, as explained above). This means your
|
(unless explicitly set in the dictionary, as explained above). This means your
|
||||||
type will be impossible to pickle. Additionally, it will not be listed in
|
type will be impossible to pickle. Additionally, it will not be listed in
|
||||||
module documentations created with pydoc.
|
module documentations created with pydoc.
|
||||||
|
@ -1131,7 +1131,7 @@ and :c:data:`PyType_Type` effectively act as defaults.)
|
||||||
|
|
||||||
.. c:macro:: Py_TPFLAGS_MANAGED_DICT
|
.. c:macro:: Py_TPFLAGS_MANAGED_DICT
|
||||||
|
|
||||||
This bit indicates that instances of the class have a ``__dict__``
|
This bit indicates that instances of the class have a `~object.__dict__`
|
||||||
attribute, and that the space for the dictionary is managed by the VM.
|
attribute, and that the space for the dictionary is managed by the VM.
|
||||||
|
|
||||||
If this flag is set, :c:macro:`Py_TPFLAGS_HAVE_GC` should also be set.
|
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.)
|
||||||
.. c:member:: const char* PyTypeObject.tp_doc
|
.. c:member:: const char* PyTypeObject.tp_doc
|
||||||
|
|
||||||
An optional pointer to a NUL-terminated C string giving the docstring for this
|
An optional pointer to a NUL-terminated C string giving the docstring for this
|
||||||
type object. This is exposed as the :attr:`__doc__` attribute on the type and
|
type object. This is exposed as the :attr:`~type.__doc__` attribute on the
|
||||||
instances of the type.
|
type and instances of the type.
|
||||||
|
|
||||||
**Inheritance:**
|
**Inheritance:**
|
||||||
|
|
||||||
|
@ -2036,7 +2036,7 @@ and :c:data:`PyType_Type` effectively act as defaults.)
|
||||||
A collection of subclasses. Internal use only. May be an invalid pointer.
|
A collection of subclasses. Internal use only. May be an invalid pointer.
|
||||||
|
|
||||||
To get a list of subclasses, call the Python method
|
To get a list of subclasses, call the Python method
|
||||||
:py:meth:`~class.__subclasses__`.
|
:py:meth:`~type.__subclasses__`.
|
||||||
|
|
||||||
.. versionchanged:: 3.12
|
.. versionchanged:: 3.12
|
||||||
|
|
||||||
|
|
|
@ -296,7 +296,7 @@ An interesting advantage of using the :c:member:`~PyTypeObject.tp_members` table
|
||||||
descriptors that are used at runtime is that any attribute defined this way can
|
descriptors that are used at runtime is that any attribute defined this way can
|
||||||
have an associated doc string simply by providing the text in the table. An
|
have an associated doc string simply by providing the text in the table. An
|
||||||
application can use the introspection API to retrieve the descriptor from the
|
application can use the introspection API to retrieve the descriptor from the
|
||||||
class object, and get the doc string using its :attr:`!__doc__` attribute.
|
class object, and get the doc string using its :attr:`~type.__doc__` attribute.
|
||||||
|
|
||||||
As with the :c:member:`~PyTypeObject.tp_methods` table, a sentinel entry with a :c:member:`~PyMethodDef.ml_name` value
|
As with the :c:member:`~PyTypeObject.tp_methods` table, a sentinel entry with a :c:member:`~PyMethodDef.ml_name` value
|
||||||
of ``NULL`` is required.
|
of ``NULL`` is required.
|
||||||
|
|
|
@ -144,7 +144,7 @@ only used for variable-sized objects and should otherwise be zero.
|
||||||
If you want your type to be subclassable from Python, and your type has the same
|
If you want your type to be subclassable from Python, and your type has the same
|
||||||
:c:member:`~PyTypeObject.tp_basicsize` as its base type, you may have problems with multiple
|
:c:member:`~PyTypeObject.tp_basicsize` as its base type, you may have problems with multiple
|
||||||
inheritance. A Python subclass of your type will have to list your type first
|
inheritance. A Python subclass of your type will have to list your type first
|
||||||
in its :attr:`~class.__bases__`, or else it will not be able to call your type's
|
in its :attr:`~type.__bases__`, or else it will not be able to call your type's
|
||||||
:meth:`~object.__new__` method without getting an error. You can avoid this problem by
|
:meth:`~object.__new__` method without getting an error. You can avoid this problem by
|
||||||
ensuring that your type has a larger value for :c:member:`~PyTypeObject.tp_basicsize` than its
|
ensuring that your type has a larger value for :c:member:`~PyTypeObject.tp_basicsize` than its
|
||||||
base type does. Most of the time, this will be true anyway, because either your
|
base type does. Most of the time, this will be true anyway, because either your
|
||||||
|
|
|
@ -1614,7 +1614,7 @@ method too, and it must do so carefully. The basic implementation of
|
||||||
...
|
...
|
||||||
|
|
||||||
Most :meth:`!__setattr__` implementations must modify
|
Most :meth:`!__setattr__` implementations must modify
|
||||||
:meth:`self.__dict__ <object.__dict__>` to store
|
:attr:`self.__dict__ <object.__dict__>` to store
|
||||||
local state for self without causing an infinite recursion.
|
local state for self without causing an infinite recursion.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -347,7 +347,7 @@ Glossary
|
||||||
docstring
|
docstring
|
||||||
A string literal which appears as the first expression in a class,
|
A string literal which appears as the first expression in a class,
|
||||||
function or module. While ignored when the suite is executed, it is
|
function or module. While ignored when the suite is executed, it is
|
||||||
recognized by the compiler and put into the :attr:`!__doc__` attribute
|
recognized by the compiler and put into the :attr:`~definition.__doc__` attribute
|
||||||
of the enclosing class, function or module. Since it is available via
|
of the enclosing class, function or module. Since it is available via
|
||||||
introspection, it is the canonical place for documentation of the
|
introspection, it is the canonical place for documentation of the
|
||||||
object.
|
object.
|
||||||
|
@ -1241,7 +1241,7 @@ Glossary
|
||||||
type
|
type
|
||||||
The type of a Python object determines what kind of object it is; every
|
The type of a Python object determines what kind of object it is; every
|
||||||
object has a type. An object's type is accessible as its
|
object has a type. An object's type is accessible as its
|
||||||
:attr:`~instance.__class__` attribute or can be retrieved with
|
:attr:`~object.__class__` attribute or can be retrieved with
|
||||||
``type(obj)``.
|
``type(obj)``.
|
||||||
|
|
||||||
type alias
|
type alias
|
||||||
|
|
|
@ -107,9 +107,9 @@ Your code will have to have a separate code path if the object
|
||||||
you're examining is a class (``isinstance(o, type)``).
|
you're examining is a class (``isinstance(o, type)``).
|
||||||
In that case, best practice relies on an implementation detail
|
In that case, best practice relies on an implementation detail
|
||||||
of Python 3.9 and before: if a class has annotations defined,
|
of Python 3.9 and before: if a class has annotations defined,
|
||||||
they are stored in the class's ``__dict__`` dictionary. Since
|
they are stored in the class's :attr:`~type.__dict__` dictionary. Since
|
||||||
the class may or may not have annotations defined, best practice
|
the class may or may not have annotations defined, best practice
|
||||||
is to call the ``get`` method on the class dict.
|
is to call the :meth:`~dict.get` method on the class dict.
|
||||||
|
|
||||||
To put it all together, here is some sample code that safely
|
To put it all together, here is some sample code that safely
|
||||||
accesses the ``__annotations__`` attribute on an arbitrary
|
accesses the ``__annotations__`` attribute on an arbitrary
|
||||||
|
@ -126,8 +126,8 @@ the type of ``ann`` using :func:`isinstance` before further
|
||||||
examination.
|
examination.
|
||||||
|
|
||||||
Note that some exotic or malformed type objects may not have
|
Note that some exotic or malformed type objects may not have
|
||||||
a ``__dict__`` attribute, so for extra safety you may also wish
|
a :attr:`~type.__dict__` attribute, so for extra safety you may also wish
|
||||||
to use :func:`getattr` to access ``__dict__``.
|
to use :func:`getattr` to access :attr:`!__dict__`.
|
||||||
|
|
||||||
|
|
||||||
Manually Un-Stringizing Stringized Annotations
|
Manually Un-Stringizing Stringized Annotations
|
||||||
|
@ -247,4 +247,5 @@ on the class, you may observe unexpected behavior; see
|
||||||
quirks by using :func:`annotationlib.get_annotations` on Python 3.14+ or
|
quirks by using :func:`annotationlib.get_annotations` on Python 3.14+ or
|
||||||
:func:`inspect.get_annotations` on Python 3.10+. On earlier versions of
|
:func:`inspect.get_annotations` on Python 3.10+. On earlier versions of
|
||||||
Python, you can avoid these bugs by accessing the annotations from the
|
Python, you can avoid these bugs by accessing the annotations from the
|
||||||
class's ``__dict__`` (e.g., ``cls.__dict__.get('__annotations__', None)``).
|
class's :attr:`~type.__dict__`
|
||||||
|
(e.g., ``cls.__dict__.get('__annotations__', None)``).
|
||||||
|
|
|
@ -562,8 +562,8 @@ attribute access.
|
||||||
|
|
||||||
The expression ``obj.x`` looks up the attribute ``x`` in the chain of
|
The expression ``obj.x`` looks up the attribute ``x`` in the chain of
|
||||||
namespaces for ``obj``. If the search finds a descriptor outside of the
|
namespaces for ``obj``. If the search finds a descriptor outside of the
|
||||||
instance ``__dict__``, its :meth:`__get__` method is invoked according to the
|
instance :attr:`~object.__dict__`, its :meth:`~object.__get__` method is
|
||||||
precedence rules listed below.
|
invoked according to the precedence rules listed below.
|
||||||
|
|
||||||
The details of invocation depend on whether ``obj`` is an object, class, or
|
The details of invocation depend on whether ``obj`` is an object, class, or
|
||||||
instance of super.
|
instance of super.
|
||||||
|
|
|
@ -608,7 +608,7 @@ The solution is to specify the module name explicitly as follows::
|
||||||
the source, pickling will be disabled.
|
the source, pickling will be disabled.
|
||||||
|
|
||||||
The new pickle protocol 4 also, in some circumstances, relies on
|
The new pickle protocol 4 also, in some circumstances, relies on
|
||||||
:attr:`~definition.__qualname__` being set to the location where pickle will be able
|
:attr:`~type.__qualname__` being set to the location where pickle will be able
|
||||||
to find the class. For example, if the class was made available in class
|
to find the class. For example, if the class was made available in class
|
||||||
SomeData in the global scope::
|
SomeData in the global scope::
|
||||||
|
|
||||||
|
|
|
@ -335,7 +335,7 @@ E is more specialized than C, even if it is in a higher level.
|
||||||
|
|
||||||
A lazy programmer can obtain the MRO directly from Python 2.2, since in
|
A lazy programmer can obtain the MRO directly from Python 2.2, since in
|
||||||
this case it coincides with the Python 2.3 linearization. It is enough
|
this case it coincides with the Python 2.3 linearization. It is enough
|
||||||
to invoke the .mro() method of class A:
|
to invoke the :meth:`~type.mro` method of class A:
|
||||||
|
|
||||||
>>> A.mro() # doctest: +NORMALIZE_WHITESPACE
|
>>> A.mro() # doctest: +NORMALIZE_WHITESPACE
|
||||||
[<class 'A'>, <class 'B'>, <class 'E'>,
|
[<class 'A'>, <class 'B'>, <class 'E'>,
|
||||||
|
|
|
@ -99,7 +99,7 @@ a helper class :class:`ABC` to alternatively define ABCs through inheritance:
|
||||||
that you can customize the behavior of :func:`issubclass` further without the
|
that you can customize the behavior of :func:`issubclass` further without the
|
||||||
need to call :meth:`register` on every class you want to consider a
|
need to call :meth:`register` on every class you want to consider a
|
||||||
subclass of the ABC. (This class method is called from the
|
subclass of the ABC. (This class method is called from the
|
||||||
:meth:`~class.__subclasscheck__` method of the ABC.)
|
:meth:`~type.__subclasscheck__` method of the ABC.)
|
||||||
|
|
||||||
This method should return ``True``, ``False`` or :data:`NotImplemented`. If
|
This method should return ``True``, ``False`` or :data:`NotImplemented`. If
|
||||||
it returns ``True``, the *subclass* is considered a subclass of this ABC.
|
it returns ``True``, the *subclass* is considered a subclass of this ABC.
|
||||||
|
@ -149,7 +149,7 @@ a helper class :class:`ABC` to alternatively define ABCs through inheritance:
|
||||||
The :meth:`__subclasshook__` class method defined here says that any class
|
The :meth:`__subclasshook__` class method defined here says that any class
|
||||||
that has an :meth:`~iterator.__iter__` method in its
|
that has an :meth:`~iterator.__iter__` method in its
|
||||||
:attr:`~object.__dict__` (or in that of one of its base classes, accessed
|
:attr:`~object.__dict__` (or in that of one of its base classes, accessed
|
||||||
via the :attr:`~class.__mro__` list) is considered a ``MyIterable`` too.
|
via the :attr:`~type.__mro__` list) is considered a ``MyIterable`` too.
|
||||||
|
|
||||||
Finally, the last line makes ``Foo`` a virtual subclass of ``MyIterable``,
|
Finally, the last line makes ``Foo`` a virtual subclass of ``MyIterable``,
|
||||||
even though it does not define an :meth:`~iterator.__iter__` method (it uses
|
even though it does not define an :meth:`~iterator.__iter__` method (it uses
|
||||||
|
|
|
@ -874,8 +874,8 @@ they add the ability to access fields by name instead of position index.
|
||||||
``(1, 2)``, then ``x`` will be a required argument, ``y`` will default to
|
``(1, 2)``, then ``x`` will be a required argument, ``y`` will default to
|
||||||
``1``, and ``z`` will default to ``2``.
|
``1``, and ``z`` will default to ``2``.
|
||||||
|
|
||||||
If *module* is defined, the ``__module__`` attribute of the named tuple is
|
If *module* is defined, the :attr:`~type.__module__` attribute of the
|
||||||
set to that value.
|
named tuple is set to that value.
|
||||||
|
|
||||||
Named tuple instances do not have per-instance dictionaries, so they are
|
Named tuple instances do not have per-instance dictionaries, so they are
|
||||||
lightweight and require no more memory than regular tuples.
|
lightweight and require no more memory than regular tuples.
|
||||||
|
|
|
@ -58,11 +58,12 @@
|
||||||
* the type itself (``typ``)
|
* the type itself (``typ``)
|
||||||
* the type's fully qualified name (``typ.__module__ + '.' +
|
* the type's fully qualified name (``typ.__module__ + '.' +
|
||||||
typ.__qualname__``).
|
typ.__qualname__``).
|
||||||
* the type's qualname (``typ.__qualname__``)
|
* the type's :attr:`qualname <type.__qualname__>` (``typ.__qualname__``)
|
||||||
* the type's name (``typ.__name__``).
|
* the type's :attr:`name <type.__name__>` (``typ.__name__``).
|
||||||
|
|
||||||
If none of the above match, repeat all of the checks above for each of
|
If none of the above match, repeat all of the checks above for each of
|
||||||
the types in the :term:`MRO` (``typ.__mro__``). Finally, if no other key
|
the types in the :term:`MRO` (:attr:`typ.__mro__ <type.__mro__>`).
|
||||||
|
Finally, if no other key
|
||||||
yields a handler, check for a handler for the key ``None``. If there is
|
yields a handler, check for a handler for the key ``None``. If there is
|
||||||
no handler for ``None``, raise a :exc:`KeyError` for the fully
|
no handler for ``None``, raise a :exc:`KeyError` for the fully
|
||||||
qualified name of the type.
|
qualified name of the type.
|
||||||
|
|
|
@ -317,7 +317,7 @@ variant, :attr:`~.BaseHeader.max_count` is set to 1.
|
||||||
class. When *use_default_map* is ``True`` (the default), the standard
|
class. When *use_default_map* is ``True`` (the default), the standard
|
||||||
mapping of header names to classes is copied in to the registry during
|
mapping of header names to classes is copied in to the registry during
|
||||||
initialization. *base_class* is always the last class in the generated
|
initialization. *base_class* is always the last class in the generated
|
||||||
class's ``__bases__`` list.
|
class's :class:`~type.__bases__` list.
|
||||||
|
|
||||||
The default mappings are:
|
The default mappings are:
|
||||||
|
|
||||||
|
|
|
@ -283,9 +283,11 @@ are always available. They are listed here in alphabetical order.
|
||||||
:func:`property`.
|
:func:`property`.
|
||||||
|
|
||||||
.. versionchanged:: 3.10
|
.. versionchanged:: 3.10
|
||||||
Class methods now inherit the method attributes (``__module__``,
|
Class methods now inherit the method attributes
|
||||||
``__name__``, ``__qualname__``, ``__doc__`` and ``__annotations__``) and
|
(:attr:`~function.__module__`, :attr:`~function.__name__`,
|
||||||
have a new ``__wrapped__`` attribute.
|
:attr:`~function.__qualname__`, :attr:`~function.__doc__` and
|
||||||
|
:attr:`~function.__annotations__`) and have a new ``__wrapped__``
|
||||||
|
attribute.
|
||||||
|
|
||||||
.. deprecated-removed:: 3.11 3.13
|
.. deprecated-removed:: 3.11 3.13
|
||||||
Class methods can no longer wrap other :term:`descriptors <descriptor>` such as
|
Class methods can no longer wrap other :term:`descriptors <descriptor>` such as
|
||||||
|
@ -1286,8 +1288,9 @@ are always available. They are listed here in alphabetical order.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
:class:`object` does *not* have a :attr:`~object.__dict__`, so you can't
|
:class:`object` instances do *not* have :attr:`~object.__dict__`
|
||||||
assign arbitrary attributes to an instance of the :class:`object` class.
|
attributes, so you can't assign arbitrary attributes to an instance of
|
||||||
|
:class:`object`.
|
||||||
|
|
||||||
|
|
||||||
.. function:: oct(x)
|
.. function:: oct(x)
|
||||||
|
@ -1907,10 +1910,11 @@ are always available. They are listed here in alphabetical order.
|
||||||
For more information on static methods, see :ref:`types`.
|
For more information on static methods, see :ref:`types`.
|
||||||
|
|
||||||
.. versionchanged:: 3.10
|
.. versionchanged:: 3.10
|
||||||
Static methods now inherit the method attributes (``__module__``,
|
Static methods now inherit the method attributes
|
||||||
``__name__``, ``__qualname__``, ``__doc__`` and ``__annotations__``),
|
(:attr:`~function.__module__`, :attr:`~function.__name__`,
|
||||||
have a new ``__wrapped__`` attribute, and are now callable as regular
|
:attr:`~function.__qualname__`, :attr:`~function.__doc__` and
|
||||||
functions.
|
:attr:`~function.__annotations__`), have a new ``__wrapped__`` attribute,
|
||||||
|
and are now callable as regular functions.
|
||||||
|
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
|
@ -1961,11 +1965,11 @@ are always available. They are listed here in alphabetical order.
|
||||||
to be searched. The search starts from the class right after the
|
to be searched. The search starts from the class right after the
|
||||||
*type*.
|
*type*.
|
||||||
|
|
||||||
For example, if :attr:`~class.__mro__` of *object_or_type* is
|
For example, if :attr:`~type.__mro__` of *object_or_type* is
|
||||||
``D -> B -> C -> A -> object`` and the value of *type* is ``B``,
|
``D -> B -> C -> A -> object`` and the value of *type* is ``B``,
|
||||||
then :func:`super` searches ``C -> A -> object``.
|
then :func:`super` searches ``C -> A -> object``.
|
||||||
|
|
||||||
The :attr:`~class.__mro__` attribute of the class corresponding to
|
The :attr:`~type.__mro__` attribute of the class corresponding to
|
||||||
*object_or_type* lists the method resolution search order used by both
|
*object_or_type* lists the method resolution search order used by both
|
||||||
:func:`getattr` and :func:`super`. The attribute is dynamic and can change
|
:func:`getattr` and :func:`super`. The attribute is dynamic and can change
|
||||||
whenever the inheritance hierarchy is updated.
|
whenever the inheritance hierarchy is updated.
|
||||||
|
@ -2044,28 +2048,30 @@ are always available. They are listed here in alphabetical order.
|
||||||
|
|
||||||
With one argument, return the type of an *object*. The return value is a
|
With one argument, return the type of an *object*. The return value is a
|
||||||
type object and generally the same object as returned by
|
type object and generally the same object as returned by
|
||||||
:attr:`object.__class__ <instance.__class__>`.
|
:attr:`object.__class__`.
|
||||||
|
|
||||||
The :func:`isinstance` built-in function is recommended for testing the type
|
The :func:`isinstance` built-in function is recommended for testing the type
|
||||||
of an object, because it takes subclasses into account.
|
of an object, because it takes subclasses into account.
|
||||||
|
|
||||||
|
|
||||||
With three arguments, return a new type object. This is essentially a
|
With three arguments, return a new type object. This is essentially a
|
||||||
dynamic form of the :keyword:`class` statement. The *name* string is
|
dynamic form of the :keyword:`class` statement. The *name* string is
|
||||||
the class name and becomes the :attr:`~definition.__name__` attribute.
|
the class name and becomes the :attr:`~type.__name__` attribute.
|
||||||
The *bases* tuple contains the base classes and becomes the
|
The *bases* tuple contains the base classes and becomes the
|
||||||
:attr:`~class.__bases__` attribute; if empty, :class:`object`, the
|
:attr:`~type.__bases__` attribute; if empty, :class:`object`, the
|
||||||
ultimate base of all classes, is added. The *dict* dictionary contains
|
ultimate base of all classes, is added. The *dict* dictionary contains
|
||||||
attribute and method definitions for the class body; it may be copied
|
attribute and method definitions for the class body; it may be copied
|
||||||
or wrapped before becoming the :attr:`~object.__dict__` attribute.
|
or wrapped before becoming the :attr:`~type.__dict__` attribute.
|
||||||
The following two statements create identical :class:`type` objects:
|
The following two statements create identical :class:`!type` objects:
|
||||||
|
|
||||||
>>> class X:
|
>>> class X:
|
||||||
... a = 1
|
... a = 1
|
||||||
...
|
...
|
||||||
>>> X = type('X', (), dict(a=1))
|
>>> X = type('X', (), dict(a=1))
|
||||||
|
|
||||||
See also :ref:`bltin-type-objects`.
|
See also:
|
||||||
|
|
||||||
|
* :ref:`Documentation on attributes and methods on classes <class-attrs-and-methods>`.
|
||||||
|
* :ref:`bltin-type-objects`
|
||||||
|
|
||||||
Keyword arguments provided to the three argument form are passed to the
|
Keyword arguments provided to the three argument form are passed to the
|
||||||
appropriate metaclass machinery (usually :meth:`~object.__init_subclass__`)
|
appropriate metaclass machinery (usually :meth:`~object.__init_subclass__`)
|
||||||
|
@ -2075,18 +2081,18 @@ are always available. They are listed here in alphabetical order.
|
||||||
See also :ref:`class-customization`.
|
See also :ref:`class-customization`.
|
||||||
|
|
||||||
.. versionchanged:: 3.6
|
.. versionchanged:: 3.6
|
||||||
Subclasses of :class:`type` which don't override ``type.__new__`` may no
|
Subclasses of :class:`!type` which don't override ``type.__new__`` may no
|
||||||
longer use the one-argument form to get the type of an object.
|
longer use the one-argument form to get the type of an object.
|
||||||
|
|
||||||
.. function:: vars()
|
.. function:: vars()
|
||||||
vars(object)
|
vars(object)
|
||||||
|
|
||||||
Return the :attr:`~object.__dict__` attribute for a module, class, instance,
|
Return the :attr:`~object.__dict__` attribute for a module, class, instance,
|
||||||
or any other object with a :attr:`~object.__dict__` attribute.
|
or any other object with a :attr:`!__dict__` attribute.
|
||||||
|
|
||||||
Objects such as modules and instances have an updateable :attr:`~object.__dict__`
|
Objects such as modules and instances have an updateable :attr:`~object.__dict__`
|
||||||
attribute; however, other objects may have write restrictions on their
|
attribute; however, other objects may have write restrictions on their
|
||||||
:attr:`~object.__dict__` attributes (for example, classes use a
|
:attr:`!__dict__` attributes (for example, classes use a
|
||||||
:class:`types.MappingProxyType` to prevent direct dictionary updates).
|
:class:`types.MappingProxyType` to prevent direct dictionary updates).
|
||||||
|
|
||||||
Without an argument, :func:`vars` acts like :func:`locals`.
|
Without an argument, :func:`vars` acts like :func:`locals`.
|
||||||
|
|
|
@ -646,10 +646,11 @@ The :mod:`functools` module defines the following functions:
|
||||||
attributes of the wrapper function are updated with the corresponding attributes
|
attributes of the wrapper function are updated with the corresponding attributes
|
||||||
from the original function. The default values for these arguments are the
|
from the original function. The default values for these arguments are the
|
||||||
module level constants ``WRAPPER_ASSIGNMENTS`` (which assigns to the wrapper
|
module level constants ``WRAPPER_ASSIGNMENTS`` (which assigns to the wrapper
|
||||||
function's ``__module__``, ``__name__``, ``__qualname__``, ``__annotations__``,
|
function's :attr:`~function.__module__`, :attr:`~function.__name__`,
|
||||||
``__type_params__``, and ``__doc__``, the documentation string)
|
:attr:`~function.__qualname__`, :attr:`~function.__annotations__`,
|
||||||
and ``WRAPPER_UPDATES`` (which
|
:attr:`~function.__type_params__`, and :attr:`~function.__doc__`, the
|
||||||
updates the wrapper function's ``__dict__``, i.e. the instance dictionary).
|
documentation string) and ``WRAPPER_UPDATES`` (which updates the wrapper
|
||||||
|
function's :attr:`~function.__dict__`, i.e. the instance dictionary).
|
||||||
|
|
||||||
To allow access to the original function for introspection and other purposes
|
To allow access to the original function for introspection and other purposes
|
||||||
(e.g. bypassing a caching decorator such as :func:`lru_cache`), this function
|
(e.g. bypassing a caching decorator such as :func:`lru_cache`), this function
|
||||||
|
@ -670,7 +671,7 @@ The :mod:`functools` module defines the following functions:
|
||||||
|
|
||||||
.. versionchanged:: 3.2
|
.. versionchanged:: 3.2
|
||||||
The ``__wrapped__`` attribute is now automatically added.
|
The ``__wrapped__`` attribute is now automatically added.
|
||||||
The ``__annotations__`` attribute is now copied by default.
|
The :attr:`~function.__annotations__` attribute is now copied by default.
|
||||||
Missing attributes no longer trigger an :exc:`AttributeError`.
|
Missing attributes no longer trigger an :exc:`AttributeError`.
|
||||||
|
|
||||||
.. versionchanged:: 3.4
|
.. versionchanged:: 3.4
|
||||||
|
@ -679,7 +680,7 @@ The :mod:`functools` module defines the following functions:
|
||||||
(see :issue:`17482`)
|
(see :issue:`17482`)
|
||||||
|
|
||||||
.. versionchanged:: 3.12
|
.. versionchanged:: 3.12
|
||||||
The ``__type_params__`` attribute is now copied by default.
|
The :attr:`~function.__type_params__` attribute is now copied by default.
|
||||||
|
|
||||||
|
|
||||||
.. decorator:: wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
|
.. decorator:: wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
|
||||||
|
@ -741,9 +742,10 @@ have three read-only attributes:
|
||||||
The keyword arguments that will be supplied when the :class:`partial` object is
|
The keyword arguments that will be supplied when the :class:`partial` object is
|
||||||
called.
|
called.
|
||||||
|
|
||||||
:class:`partial` objects are like :class:`function` objects in that they are
|
:class:`partial` objects are like :ref:`function objects <user-defined-funcs>`
|
||||||
callable, weak referenceable, and can have attributes. There are some important
|
in that they are callable, weak referenceable, and can have attributes.
|
||||||
differences. For instance, the :attr:`~definition.__name__` and :attr:`__doc__` attributes
|
There are some important differences. For instance, the
|
||||||
|
:attr:`~function.__name__` and :attr:`function.__doc__` attributes
|
||||||
are not created automatically. Also, :class:`partial` objects defined in
|
are not created automatically. Also, :class:`partial` objects defined in
|
||||||
classes behave like static methods and do not transform into bound methods
|
classes behave like static methods and do not transform into bound methods
|
||||||
during instance attribute look-up.
|
during instance attribute look-up.
|
||||||
|
|
|
@ -545,7 +545,7 @@ attributes (see :ref:`import-mod-attrs` for module attributes):
|
||||||
has a :meth:`~object.__get__` method, but not a :meth:`~object.__set__`
|
has a :meth:`~object.__get__` method, but not a :meth:`~object.__set__`
|
||||||
method or a :meth:`~object.__delete__` method. Beyond that, the set of
|
method or a :meth:`~object.__delete__` method. Beyond that, the set of
|
||||||
attributes varies. A :attr:`~definition.__name__` attribute is usually
|
attributes varies. A :attr:`~definition.__name__` attribute is usually
|
||||||
sensible, and :attr:`!__doc__` often is.
|
sensible, and :attr:`~definition.__doc__` often is.
|
||||||
|
|
||||||
Methods implemented via descriptors that also pass one of the other tests
|
Methods implemented via descriptors that also pass one of the other tests
|
||||||
return ``False`` from the :func:`ismethoddescriptor` test, simply because the
|
return ``False`` from the :func:`ismethoddescriptor` test, simply because the
|
||||||
|
|
|
@ -304,7 +304,8 @@ in a module, ``__name__`` is the module's name in the Python package namespace.
|
||||||
parameter mirrors the equivalent one in the :mod:`warnings` module.
|
parameter mirrors the equivalent one in the :mod:`warnings` module.
|
||||||
|
|
||||||
The fourth keyword argument is *extra* which can be used to pass a
|
The fourth keyword argument is *extra* which can be used to pass a
|
||||||
dictionary which is used to populate the __dict__ of the :class:`LogRecord`
|
dictionary which is used to populate the :attr:`~object.__dict__` of the
|
||||||
|
:class:`LogRecord`
|
||||||
created for the logging event with user-defined attributes. These custom
|
created for the logging event with user-defined attributes. These custom
|
||||||
attributes can then be used as you like. For example, they could be
|
attributes can then be used as you like. For example, they could be
|
||||||
incorporated into logged messages. For example::
|
incorporated into logged messages. For example::
|
||||||
|
|
|
@ -21,7 +21,7 @@ modules. The documentation can be presented as pages of text on the console,
|
||||||
served to a web browser, or saved to HTML files.
|
served to a web browser, or saved to HTML files.
|
||||||
|
|
||||||
For modules, classes, functions and methods, the displayed documentation is
|
For modules, classes, functions and methods, the displayed documentation is
|
||||||
derived from the docstring (i.e. the :attr:`!__doc__` attribute) of the object,
|
derived from the docstring (i.e. the :attr:`~definition.__doc__` attribute) of the object,
|
||||||
and recursively of its documentable members. If there is no docstring,
|
and recursively of its documentable members. If there is no docstring,
|
||||||
:mod:`!pydoc` tries to obtain a description from the block of comment lines just
|
:mod:`!pydoc` tries to obtain a description from the block of comment lines just
|
||||||
above the definition of the class, function or method in the source file, or at
|
above the definition of the class, function or method in the source file, or at
|
||||||
|
|
|
@ -5521,22 +5521,6 @@ types, where they are relevant. Some of these are not reported by the
|
||||||
:func:`dir` built-in function.
|
:func:`dir` built-in function.
|
||||||
|
|
||||||
|
|
||||||
.. attribute:: object.__dict__
|
|
||||||
|
|
||||||
A dictionary or other mapping object used to store an object's (writable)
|
|
||||||
attributes.
|
|
||||||
|
|
||||||
|
|
||||||
.. attribute:: instance.__class__
|
|
||||||
|
|
||||||
The class to which a class instance belongs.
|
|
||||||
|
|
||||||
|
|
||||||
.. attribute:: class.__bases__
|
|
||||||
|
|
||||||
The tuple of base classes of a class object.
|
|
||||||
|
|
||||||
|
|
||||||
.. attribute:: definition.__name__
|
.. attribute:: definition.__name__
|
||||||
|
|
||||||
The name of the class, function, method, descriptor, or
|
The name of the class, function, method, descriptor, or
|
||||||
|
@ -5551,44 +5535,25 @@ types, where they are relevant. Some of these are not reported by the
|
||||||
.. versionadded:: 3.3
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
|
|
||||||
|
.. attribute:: definition.__module__
|
||||||
|
|
||||||
|
The name of the module in which a class or function was defined.
|
||||||
|
|
||||||
|
|
||||||
|
.. attribute:: definition.__doc__
|
||||||
|
|
||||||
|
The documentation string of a class or function, or ``None`` if undefined.
|
||||||
|
|
||||||
|
|
||||||
.. attribute:: definition.__type_params__
|
.. attribute:: definition.__type_params__
|
||||||
|
|
||||||
The :ref:`type parameters <type-params>` of generic classes, functions,
|
The :ref:`type parameters <type-params>` of generic classes, functions,
|
||||||
and :ref:`type aliases <type-aliases>`.
|
and :ref:`type aliases <type-aliases>`. For classes and functions that
|
||||||
|
are not generic, this will be an empty tuple.
|
||||||
|
|
||||||
.. versionadded:: 3.12
|
.. versionadded:: 3.12
|
||||||
|
|
||||||
|
|
||||||
.. attribute:: class.__mro__
|
|
||||||
|
|
||||||
This attribute is a tuple of classes that are considered when looking for
|
|
||||||
base classes during method resolution.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: class.mro()
|
|
||||||
|
|
||||||
This method can be overridden by a metaclass to customize the method
|
|
||||||
resolution order for its instances. It is called at class instantiation, and
|
|
||||||
its result is stored in :attr:`~class.__mro__`.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: class.__subclasses__
|
|
||||||
|
|
||||||
Each class keeps a list of weak references to its immediate subclasses. This
|
|
||||||
method returns a list of all those references still alive. The list is in
|
|
||||||
definition order. Example::
|
|
||||||
|
|
||||||
>>> int.__subclasses__()
|
|
||||||
[<class 'bool'>, <enum 'IntEnum'>, <flag 'IntFlag'>, <class 're._constants._NamedIntConstant'>]
|
|
||||||
|
|
||||||
|
|
||||||
.. attribute:: class.__static_attributes__
|
|
||||||
|
|
||||||
A tuple containing names of attributes of this class which are accessed
|
|
||||||
through ``self.X`` from any function in its body.
|
|
||||||
|
|
||||||
.. versionadded:: 3.13
|
|
||||||
|
|
||||||
.. _int_max_str_digits:
|
.. _int_max_str_digits:
|
||||||
|
|
||||||
Integer string conversion length limitation
|
Integer string conversion length limitation
|
||||||
|
|
|
@ -946,7 +946,7 @@ The :mod:`test.support` module defines the following functions:
|
||||||
other modules, possibly a C backend (like ``csv`` and its ``_csv``).
|
other modules, possibly a C backend (like ``csv`` and its ``_csv``).
|
||||||
|
|
||||||
The *extra* argument can be a set of names that wouldn't otherwise be automatically
|
The *extra* argument can be a set of names that wouldn't otherwise be automatically
|
||||||
detected as "public", like objects without a proper ``__module__``
|
detected as "public", like objects without a proper :attr:`~definition.__module__`
|
||||||
attribute. If provided, it will be added to the automatically detected ones.
|
attribute. If provided, it will be added to the automatically detected ones.
|
||||||
|
|
||||||
The *not_exported* argument can be a set of names that must not be treated
|
The *not_exported* argument can be a set of names that must not be treated
|
||||||
|
|
|
@ -91,8 +91,8 @@ Dynamic Type Creation
|
||||||
|
|
||||||
For classes that have an ``__orig_bases__`` attribute, this
|
For classes that have an ``__orig_bases__`` attribute, this
|
||||||
function returns the value of ``cls.__orig_bases__``.
|
function returns the value of ``cls.__orig_bases__``.
|
||||||
For classes without the ``__orig_bases__`` attribute, ``cls.__bases__`` is
|
For classes without the ``__orig_bases__`` attribute,
|
||||||
returned.
|
:attr:`cls.__bases__ <type.__bases__>` is returned.
|
||||||
|
|
||||||
Examples::
|
Examples::
|
||||||
|
|
||||||
|
@ -392,7 +392,7 @@ Standard names are defined for the following types:
|
||||||
|
|
||||||
In addition, when a class is defined with a :attr:`~object.__slots__` attribute, then for
|
In addition, when a class is defined with a :attr:`~object.__slots__` attribute, then for
|
||||||
each slot, an instance of :class:`!MemberDescriptorType` will be added as an attribute
|
each slot, an instance of :class:`!MemberDescriptorType` will be added as an attribute
|
||||||
on the class. This allows the slot to appear in the class's :attr:`~object.__dict__`.
|
on the class. This allows the slot to appear in the class's :attr:`~type.__dict__`.
|
||||||
|
|
||||||
.. impl-detail::
|
.. impl-detail::
|
||||||
|
|
||||||
|
|
|
@ -3269,7 +3269,8 @@ Introspection helpers
|
||||||
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
|
||||||
is done by traversing ``C.__mro__`` and iteratively combining
|
is done by traversing :attr:`C.__mro__ <type.__mro__>` and iteratively
|
||||||
|
combining
|
||||||
``__annotations__`` dictionaries. Annotations on classes appearing
|
``__annotations__`` dictionaries. Annotations on classes appearing
|
||||||
earlier in the :term:`method resolution order` always take precedence over
|
earlier in the :term:`method resolution order` always take precedence over
|
||||||
annotations on classes appearing later in the method resolution order.
|
annotations on classes appearing later in the method resolution order.
|
||||||
|
|
|
@ -239,7 +239,7 @@ the *new_callable* argument to :func:`patch`.
|
||||||
Accessing any attribute not in this list will raise an :exc:`AttributeError`.
|
Accessing any attribute not in this list will raise an :exc:`AttributeError`.
|
||||||
|
|
||||||
If *spec* is an object (rather than a list of strings) then
|
If *spec* is an object (rather than a list of strings) then
|
||||||
:attr:`~instance.__class__` returns the class of the spec object. This
|
:attr:`~object.__class__` returns the class of the spec object. This
|
||||||
allows mocks to pass :func:`isinstance` tests.
|
allows mocks to pass :func:`isinstance` tests.
|
||||||
|
|
||||||
* *spec_set*: A stricter variant of *spec*. If used, attempting to *set*
|
* *spec_set*: A stricter variant of *spec*. If used, attempting to *set*
|
||||||
|
|
|
@ -1416,7 +1416,7 @@ dictionary. The class name is bound to this class object in the original local
|
||||||
namespace.
|
namespace.
|
||||||
|
|
||||||
The order in which attributes are defined in the class body is preserved
|
The order in which attributes are defined in the class body is preserved
|
||||||
in the new class's ``__dict__``. Note that this is reliable only right
|
in the new class's :attr:`~type.__dict__`. Note that this is reliable only right
|
||||||
after the class is created and only for classes that were defined using
|
after the class is created and only for classes that were defined using
|
||||||
the definition syntax.
|
the definition syntax.
|
||||||
|
|
||||||
|
@ -1447,8 +1447,8 @@ decorators. The result is then bound to the class name.
|
||||||
A list of :ref:`type parameters <type-params>` may be given in square brackets
|
A list of :ref:`type parameters <type-params>` may be given in square brackets
|
||||||
immediately after the class's name.
|
immediately after the class's name.
|
||||||
This indicates to static type checkers that the class is generic. At runtime,
|
This indicates to static type checkers that the class is generic. At runtime,
|
||||||
the type parameters can be retrieved from the class's ``__type_params__``
|
the type parameters can be retrieved from the class's
|
||||||
attribute. See :ref:`generic-classes` for more.
|
:attr:`~type.__type_params__` attribute. See :ref:`generic-classes` for more.
|
||||||
|
|
||||||
.. versionchanged:: 3.12
|
.. versionchanged:: 3.12
|
||||||
Type parameter lists are new in Python 3.12.
|
Type parameter lists are new in Python 3.12.
|
||||||
|
@ -1661,8 +1661,8 @@ with more precision. The scope of type parameters is modeled with a special
|
||||||
function (technically, an :ref:`annotation scope <annotation-scopes>`) that
|
function (technically, an :ref:`annotation scope <annotation-scopes>`) that
|
||||||
wraps the creation of the generic object.
|
wraps the creation of the generic object.
|
||||||
|
|
||||||
Generic functions, classes, and type aliases have a :attr:`!__type_params__`
|
Generic functions, classes, and type aliases have a
|
||||||
attribute listing their type parameters.
|
:attr:`~definition.__type_params__` attribute listing their type parameters.
|
||||||
|
|
||||||
Type parameters come in three kinds:
|
Type parameters come in three kinds:
|
||||||
|
|
||||||
|
@ -1924,5 +1924,5 @@ all annotations are instead stored as strings::
|
||||||
therefore the function's :term:`docstring`.
|
therefore the function's :term:`docstring`.
|
||||||
|
|
||||||
.. [#] A string literal appearing as the first statement in the class body is
|
.. [#] A string literal appearing as the first statement in the class body is
|
||||||
transformed into the namespace's ``__doc__`` item and therefore the class's
|
transformed into the namespace's :attr:`~type.__doc__` item and therefore
|
||||||
:term:`docstring`.
|
the class's :term:`docstring`.
|
||||||
|
|
|
@ -595,7 +595,6 @@ Most of these attributes check the type of the assigned value:
|
||||||
|
|
||||||
* - .. attribute:: function.__doc__
|
* - .. attribute:: function.__doc__
|
||||||
- The function's documentation string, or ``None`` if unavailable.
|
- The function's documentation string, or ``None`` if unavailable.
|
||||||
Not inherited by subclasses.
|
|
||||||
|
|
||||||
* - .. attribute:: function.__name__
|
* - .. attribute:: function.__name__
|
||||||
- The function's name.
|
- The function's name.
|
||||||
|
@ -942,6 +941,8 @@ namespace as a dictionary object.
|
||||||
or keep the module around while using its dictionary directly.
|
or keep the module around while using its dictionary directly.
|
||||||
|
|
||||||
|
|
||||||
|
.. _class-attrs-and-methods:
|
||||||
|
|
||||||
Custom classes
|
Custom classes
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
@ -984,6 +985,9 @@ of a base class.
|
||||||
|
|
||||||
A class object can be called (see above) to yield a class instance (see below).
|
A class object can be called (see above) to yield a class instance (see below).
|
||||||
|
|
||||||
|
Special attributes
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
single: __name__ (class attribute)
|
single: __name__ (class attribute)
|
||||||
single: __module__ (class attribute)
|
single: __module__ (class attribute)
|
||||||
|
@ -996,66 +1000,115 @@ A class object can be called (see above) to yield a class instance (see below).
|
||||||
single: __static_attributes__ (class attribute)
|
single: __static_attributes__ (class attribute)
|
||||||
single: __firstlineno__ (class attribute)
|
single: __firstlineno__ (class attribute)
|
||||||
|
|
||||||
Special attributes:
|
.. list-table::
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
:attr:`~definition.__name__`
|
* - Attribute
|
||||||
The class name.
|
- Meaning
|
||||||
|
|
||||||
:attr:`__module__`
|
* - .. attribute:: type.__name__
|
||||||
The name of the module in which the class was defined.
|
- The class's name.
|
||||||
|
See also: :attr:`__name__ attributes <definition.__name__>`.
|
||||||
|
|
||||||
:attr:`~object.__dict__`
|
* - .. attribute:: type.__qualname__
|
||||||
The dictionary containing the class's namespace.
|
- The class's :term:`qualified name`.
|
||||||
|
See also: :attr:`__qualname__ attributes <definition.__qualname__>`.
|
||||||
|
|
||||||
:attr:`~class.__bases__`
|
* - .. attribute:: type.__module__
|
||||||
A tuple containing the base classes, in the order of
|
- The name of the module in which the class was defined.
|
||||||
their occurrence in the base class list.
|
|
||||||
|
|
||||||
:attr:`__doc__`
|
* - .. attribute:: type.__dict__
|
||||||
The class's documentation string, or ``None`` if undefined.
|
- A :class:`mapping proxy <types.MappingProxyType>`
|
||||||
|
providing a read-only view of the class's namespace.
|
||||||
|
See also: :attr:`__dict__ attributes <object.__dict__>`.
|
||||||
|
|
||||||
:attr:`~object.__annotations__`
|
* - .. attribute:: type.__bases__
|
||||||
A dictionary containing
|
- A :class:`tuple` containing the class's bases.
|
||||||
:term:`variable annotations <variable annotation>`
|
In most cases, for a class defined as ``class X(A, B, C)``,
|
||||||
collected during class body execution. For best practices on
|
``X.__bases__`` will be exactly equal to ``(A, B, C)``.
|
||||||
working with :attr:`~object.__annotations__`, please see
|
|
||||||
:mod:`annotationlib`.
|
|
||||||
|
|
||||||
.. warning::
|
* - .. attribute:: type.__doc__
|
||||||
|
- The class's documentation string, or ``None`` if undefined.
|
||||||
|
Not inherited by subclasses.
|
||||||
|
|
||||||
Accessing the :attr:`~object.__annotations__` attribute of a class
|
* - .. attribute:: type.__annotations__
|
||||||
object directly may yield incorrect results in the presence of
|
- A dictionary containing
|
||||||
metaclasses. Use :func:`annotationlib.get_annotations` to
|
:term:`variable annotations <variable annotation>`
|
||||||
retrieve class annotations safely.
|
collected during class body execution. See also:
|
||||||
|
:attr:`__annotations__ attributes <object.__annotations__>`.
|
||||||
|
|
||||||
.. versionchanged:: 3.14
|
For best practices on working with :attr:`~object.__annotations__`,
|
||||||
Annotations are now :ref:`lazily evaluated <lazy-evaluation>`.
|
please see :mod:`annotationlib`.
|
||||||
See :pep:`649`.
|
|
||||||
|
|
||||||
:attr:`~object.__annotate__`
|
.. caution::
|
||||||
The :term:`annotate function` for this class, or ``None``
|
|
||||||
if the class has no annotations. See :attr:`object.__annotate__`.
|
|
||||||
|
|
||||||
.. warning::
|
Accessing the :attr:`!__annotations__` attribute of a class
|
||||||
|
object directly may yield incorrect results in the presence of
|
||||||
|
metaclasses. Use :func:`annotationlib.get_annotations` to
|
||||||
|
retrieve class annotations safely.
|
||||||
|
|
||||||
Accessing the :attr:`~object.__annotate__` attribute of a class
|
.. versionchanged:: 3.14
|
||||||
object directly may yield incorrect results in the presence of
|
Annotations are now :ref:`lazily evaluated <lazy-evaluation>`.
|
||||||
metaclasses. Use :func:`annotationlib.get_annotate_function` to
|
See :pep:`649`.
|
||||||
retrieve the annotate function safely.
|
|
||||||
|
|
||||||
.. versionadded:: 3.14
|
* - .. method:: type.__annotate__
|
||||||
|
- The :term:`annotate function` for this class, or ``None``
|
||||||
|
if the class has no annotations.
|
||||||
|
See also: :attr:`__annotate__ attributes <object.__annotate__>`.
|
||||||
|
|
||||||
:attr:`__type_params__`
|
.. caution::
|
||||||
A tuple containing the :ref:`type parameters <type-params>` of
|
|
||||||
a :ref:`generic class <generic-classes>`.
|
|
||||||
|
|
||||||
:attr:`~class.__static_attributes__`
|
Accessing the :attr:`!__annotate__` attribute of a class
|
||||||
A tuple containing names of attributes of this class which are assigned
|
object directly may yield incorrect results in the presence of
|
||||||
through ``self.X`` from any function in its body.
|
metaclasses. Use :func:`annotationlib.get_annotate_function` to
|
||||||
|
retrieve the annotate function safely.
|
||||||
|
|
||||||
:attr:`__firstlineno__`
|
.. versionadded:: 3.14
|
||||||
The line number of the first line of the class definition, including decorators.
|
|
||||||
|
|
||||||
|
* - .. attribute:: type.__type_params__
|
||||||
|
- A :class:`tuple` containing the :ref:`type parameters <type-params>` of
|
||||||
|
a :ref:`generic class <generic-classes>`.
|
||||||
|
|
||||||
|
.. versionadded:: 3.12
|
||||||
|
|
||||||
|
* - .. attribute:: type.__static_attributes__
|
||||||
|
- A :class:`tuple` containing names of attributes of this class which are
|
||||||
|
assigned through ``self.X`` from any function in its body.
|
||||||
|
|
||||||
|
.. versionadded:: 3.13
|
||||||
|
|
||||||
|
* - .. attribute:: type.__firstlineno__
|
||||||
|
- The line number of the first line of the class definition, including decorators.
|
||||||
|
|
||||||
|
.. versionadded:: 3.13
|
||||||
|
|
||||||
|
* - .. attribute:: type.__mro__
|
||||||
|
- The :class:`tuple` of classes that are considered when looking for
|
||||||
|
base classes during method resolution.
|
||||||
|
|
||||||
|
|
||||||
|
Special methods
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
In addition to the special attributes described above, all Python classes also
|
||||||
|
have the following two methods available:
|
||||||
|
|
||||||
|
.. method:: type.mro
|
||||||
|
|
||||||
|
This method can be overridden by a metaclass to customize the method
|
||||||
|
resolution order for its instances. It is called at class instantiation,
|
||||||
|
and its result is stored in :attr:`~type.__mro__`.
|
||||||
|
|
||||||
|
.. method:: type.__subclasses__
|
||||||
|
|
||||||
|
Each class keeps a list of weak references to its immediate subclasses. This
|
||||||
|
method returns a list of all those references still alive. The list is in
|
||||||
|
definition order. Example:
|
||||||
|
|
||||||
|
.. doctest::
|
||||||
|
|
||||||
|
>>> int.__subclasses__()
|
||||||
|
[<class 'bool'>, <enum 'IntEnum'>, <flag 'IntFlag'>, <class 're._constants._NamedIntConstant'>, <class 're._ZeroSentinel'>]
|
||||||
|
|
||||||
Class instances
|
Class instances
|
||||||
---------------
|
---------------
|
||||||
|
@ -1095,12 +1148,22 @@ dictionary directly.
|
||||||
Class instances can pretend to be numbers, sequences, or mappings if they have
|
Class instances can pretend to be numbers, sequences, or mappings if they have
|
||||||
methods with certain special names. See section :ref:`specialnames`.
|
methods with certain special names. See section :ref:`specialnames`.
|
||||||
|
|
||||||
|
Special attributes
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
single: __dict__ (instance attribute)
|
single: __dict__ (instance attribute)
|
||||||
single: __class__ (instance attribute)
|
single: __class__ (instance attribute)
|
||||||
|
|
||||||
Special attributes: :attr:`~object.__dict__` is the attribute dictionary;
|
.. attribute:: object.__class__
|
||||||
:attr:`~instance.__class__` is the instance's class.
|
|
||||||
|
The class to which a class instance belongs.
|
||||||
|
|
||||||
|
.. attribute:: object.__dict__
|
||||||
|
|
||||||
|
A dictionary or other mapping object used to store an object's (writable)
|
||||||
|
attributes. Not all instances have a :attr:`!__dict__` attribute; see the
|
||||||
|
section on :ref:`slots` for more details.
|
||||||
|
|
||||||
|
|
||||||
I/O objects (also known as file objects)
|
I/O objects (also known as file objects)
|
||||||
|
@ -2330,9 +2393,9 @@ Notes on using *__slots__*:
|
||||||
|
|
||||||
* The action of a *__slots__* declaration is not limited to the class
|
* The action of a *__slots__* declaration is not limited to the class
|
||||||
where it is defined. *__slots__* declared in parents are available in
|
where it is defined. *__slots__* declared in parents are available in
|
||||||
child classes. However, child subclasses will get a :attr:`~object.__dict__` and
|
child classes. However, instances of a child subclass will get a
|
||||||
*__weakref__* unless they also define *__slots__* (which should only
|
:attr:`~object.__dict__` and *__weakref__* unless the subclass also defines
|
||||||
contain names of any *additional* slots).
|
*__slots__* (which should only contain names of any *additional* slots).
|
||||||
|
|
||||||
* If a class defines a slot also defined in a base class, the instance variable
|
* If a class defines a slot also defined in a base class, the instance variable
|
||||||
defined by the base class slot is inaccessible (except by retrieving its
|
defined by the base class slot is inaccessible (except by retrieving its
|
||||||
|
@ -2351,7 +2414,7 @@ Notes on using *__slots__*:
|
||||||
to provide per-attribute docstrings that will be recognised by
|
to provide per-attribute docstrings that will be recognised by
|
||||||
:func:`inspect.getdoc` and displayed in the output of :func:`help`.
|
:func:`inspect.getdoc` and displayed in the output of :func:`help`.
|
||||||
|
|
||||||
* :attr:`~instance.__class__` assignment works only if both classes have the
|
* :attr:`~object.__class__` assignment works only if both classes have the
|
||||||
same *__slots__*.
|
same *__slots__*.
|
||||||
|
|
||||||
* :ref:`Multiple inheritance <tut-multiple>` with multiple slotted parent
|
* :ref:`Multiple inheritance <tut-multiple>` with multiple slotted parent
|
||||||
|
@ -2617,7 +2680,7 @@ in the local namespace as the defined class.
|
||||||
When a new class is created by ``type.__new__``, the object provided as the
|
When a new class is created by ``type.__new__``, the object provided as the
|
||||||
namespace parameter is copied to a new ordered mapping and the original
|
namespace parameter is copied to a new ordered mapping and the original
|
||||||
object is discarded. The new copy is wrapped in a read-only proxy, which
|
object is discarded. The new copy is wrapped in a read-only proxy, which
|
||||||
becomes the :attr:`~object.__dict__` attribute of the class object.
|
becomes the :attr:`~type.__dict__` attribute of the class object.
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
||||||
|
@ -2645,14 +2708,14 @@ order to allow the addition of Abstract Base Classes (ABCs) as "virtual base
|
||||||
classes" to any class or type (including built-in types), including other
|
classes" to any class or type (including built-in types), including other
|
||||||
ABCs.
|
ABCs.
|
||||||
|
|
||||||
.. method:: class.__instancecheck__(self, instance)
|
.. method:: type.__instancecheck__(self, instance)
|
||||||
|
|
||||||
Return true if *instance* should be considered a (direct or indirect)
|
Return true if *instance* should be considered a (direct or indirect)
|
||||||
instance of *class*. If defined, called to implement ``isinstance(instance,
|
instance of *class*. If defined, called to implement ``isinstance(instance,
|
||||||
class)``.
|
class)``.
|
||||||
|
|
||||||
|
|
||||||
.. method:: class.__subclasscheck__(self, subclass)
|
.. method:: type.__subclasscheck__(self, subclass)
|
||||||
|
|
||||||
Return true if *subclass* should be considered a (direct or indirect)
|
Return true if *subclass* should be considered a (direct or indirect)
|
||||||
subclass of *class*. If defined, called to implement ``issubclass(subclass,
|
subclass of *class*. If defined, called to implement ``issubclass(subclass,
|
||||||
|
@ -2668,8 +2731,8 @@ case the instance is itself a class.
|
||||||
|
|
||||||
:pep:`3119` - Introducing Abstract Base Classes
|
:pep:`3119` - Introducing Abstract Base Classes
|
||||||
Includes the specification for customizing :func:`isinstance` and
|
Includes the specification for customizing :func:`isinstance` and
|
||||||
:func:`issubclass` behavior through :meth:`~class.__instancecheck__` and
|
:func:`issubclass` behavior through :meth:`~type.__instancecheck__` and
|
||||||
:meth:`~class.__subclasscheck__`, with motivation for this functionality
|
:meth:`~type.__subclasscheck__`, with motivation for this functionality
|
||||||
in the context of adding Abstract Base Classes (see the :mod:`abc`
|
in the context of adding Abstract Base Classes (see the :mod:`abc`
|
||||||
module) to the language.
|
module) to the language.
|
||||||
|
|
||||||
|
|
|
@ -226,8 +226,8 @@ Annotation scopes differ from function scopes in the following ways:
|
||||||
statements in inner scopes. This includes only type parameters, as no other
|
statements in inner scopes. This includes only type parameters, as no other
|
||||||
syntactic elements that can appear within annotation scopes can introduce new names.
|
syntactic elements that can appear within annotation scopes can introduce new names.
|
||||||
* While annotation scopes have an internal name, that name is not reflected in the
|
* While annotation scopes have an internal name, that name is not reflected in the
|
||||||
:term:`__qualname__ <qualified name>` of objects defined within the scope.
|
:term:`qualified name` of objects defined within the scope.
|
||||||
Instead, the :attr:`!__qualname__`
|
Instead, the :attr:`~definition.__qualname__`
|
||||||
of such objects is as if the object were defined in the enclosing scope.
|
of such objects is as if the object were defined in the enclosing scope.
|
||||||
|
|
||||||
.. versionadded:: 3.12
|
.. versionadded:: 3.12
|
||||||
|
|
|
@ -104,8 +104,8 @@ identifier is used but only the following private identifiers are mangled:
|
||||||
- Any name used as the name of a variable that is assigned or read or any
|
- Any name used as the name of a variable that is assigned or read or any
|
||||||
name of an attribute being accessed.
|
name of an attribute being accessed.
|
||||||
|
|
||||||
The ``__name__`` attribute of nested functions, classes, and type aliases
|
The :attr:`~definition.__name__` attribute of nested functions, classes, and
|
||||||
is however not mangled.
|
type aliases is however not mangled.
|
||||||
|
|
||||||
- The name of imported modules, e.g., ``__spam`` in ``import __spam``.
|
- The name of imported modules, e.g., ``__spam`` in ``import __spam``.
|
||||||
If the module is part of a package (i.e., its name contains a dot),
|
If the module is part of a package (i.e., its name contains a dot),
|
||||||
|
|
|
@ -276,8 +276,8 @@ definition looked like this::
|
||||||
then ``MyClass.i`` and ``MyClass.f`` are valid attribute references, returning
|
then ``MyClass.i`` and ``MyClass.f`` are valid attribute references, returning
|
||||||
an integer and a function object, respectively. Class attributes can also be
|
an integer and a function object, respectively. Class attributes can also be
|
||||||
assigned to, so you can change the value of ``MyClass.i`` by assignment.
|
assigned to, so you can change the value of ``MyClass.i`` by assignment.
|
||||||
:attr:`!__doc__` is also a valid attribute, returning the docstring belonging to
|
:attr:`~type.__doc__` is also a valid attribute, returning the docstring
|
||||||
the class: ``"A simple example class"``.
|
belonging to the class: ``"A simple example class"``.
|
||||||
|
|
||||||
Class *instantiation* uses function notation. Just pretend that the class
|
Class *instantiation* uses function notation. Just pretend that the class
|
||||||
object is a parameterless function that returns a new instance of the class.
|
object is a parameterless function that returns a new instance of the class.
|
||||||
|
@ -932,6 +932,6 @@ Examples::
|
||||||
|
|
||||||
.. [#] Except for one thing. Module objects have a secret read-only attribute called
|
.. [#] Except for one thing. Module objects have a secret read-only attribute called
|
||||||
:attr:`~object.__dict__` which returns the dictionary used to implement the module's
|
:attr:`~object.__dict__` which returns the dictionary used to implement the module's
|
||||||
namespace; the name :attr:`~object.__dict__` is an attribute but not a global name.
|
namespace; the name ``__dict__`` is an attribute but not a global name.
|
||||||
Obviously, using this violates the abstraction of namespace implementation, and
|
Obviously, using this violates the abstraction of namespace implementation, and
|
||||||
should be restricted to things like post-mortem debuggers.
|
should be restricted to things like post-mortem debuggers.
|
||||||
|
|
|
@ -443,8 +443,8 @@ Python syntax::
|
||||||
f.grammar = "A ::= B (C D)*"
|
f.grammar = "A ::= B (C D)*"
|
||||||
|
|
||||||
The dictionary containing attributes can be accessed as the function's
|
The dictionary containing attributes can be accessed as the function's
|
||||||
:attr:`~object.__dict__`. Unlike the :attr:`~object.__dict__` attribute of class instances, in
|
:attr:`~function.__dict__`. Unlike the :attr:`~type.__dict__` attribute of class instances, in
|
||||||
functions you can actually assign a new dictionary to :attr:`~object.__dict__`, though
|
functions you can actually assign a new dictionary to :attr:`~function.__dict__`, though
|
||||||
the new value is restricted to a regular Python dictionary; you *can't* be
|
the new value is restricted to a regular Python dictionary; you *can't* be
|
||||||
tricky and set it to a :class:`!UserDict` instance, or any other random object
|
tricky and set it to a :class:`!UserDict` instance, or any other random object
|
||||||
that behaves like a mapping.
|
that behaves like a mapping.
|
||||||
|
|
|
@ -171,7 +171,7 @@ attributes of their own:
|
||||||
|
|
||||||
* :attr:`~definition.__name__` is the attribute's name.
|
* :attr:`~definition.__name__` is the attribute's name.
|
||||||
|
|
||||||
* :attr:`!__doc__` is the attribute's docstring.
|
* :attr:`~definition.__doc__` is the attribute's docstring.
|
||||||
|
|
||||||
* ``__get__(object)`` is a method that retrieves the attribute value from
|
* ``__get__(object)`` is a method that retrieves the attribute value from
|
||||||
*object*.
|
*object*.
|
||||||
|
@ -186,7 +186,8 @@ are::
|
||||||
descriptor = obj.__class__.x
|
descriptor = obj.__class__.x
|
||||||
descriptor.__get__(obj)
|
descriptor.__get__(obj)
|
||||||
|
|
||||||
For methods, :meth:`!descriptor.__get__` returns a temporary object that's
|
For methods, :meth:`descriptor.__get__ <object.__get__>` returns a temporary
|
||||||
|
object that's
|
||||||
callable, and wraps up the instance and the method to be called on it. This is
|
callable, and wraps up the instance and the method to be called on it. This is
|
||||||
also why static methods and class methods are now possible; they have
|
also why static methods and class methods are now possible; they have
|
||||||
descriptors that wrap up just the method, or the method and the class. As a
|
descriptors that wrap up just the method, or the method and the class. As a
|
||||||
|
|
|
@ -1113,10 +1113,10 @@ Here are all of the changes that Python 2.3 makes to the core Python language.
|
||||||
<type '_socket.socket'>
|
<type '_socket.socket'>
|
||||||
|
|
||||||
* One of the noted incompatibilities between old- and new-style classes has been
|
* One of the noted incompatibilities between old- and new-style classes has been
|
||||||
removed: you can now assign to the :attr:`~definition.__name__` and :attr:`~class.__bases__`
|
removed: you can now assign to the :attr:`~type.__name__` and :attr:`~type.__bases__`
|
||||||
attributes of new-style classes. There are some restrictions on what can be
|
attributes of new-style classes. There are some restrictions on what can be
|
||||||
assigned to :attr:`~class.__bases__` along the lines of those relating to assigning to
|
assigned to :attr:`!__bases__` along the lines of those relating to assigning to
|
||||||
an instance's :attr:`~instance.__class__` attribute.
|
an instance's :attr:`~object.__class__` attribute.
|
||||||
|
|
||||||
.. ======================================================================
|
.. ======================================================================
|
||||||
|
|
||||||
|
@ -1925,8 +1925,8 @@ Changes to Python's build process and to the C API include:
|
||||||
dependence on a system version or local installation of Expat.
|
dependence on a system version or local installation of Expat.
|
||||||
|
|
||||||
* If you dynamically allocate type objects in your extension, you should be
|
* If you dynamically allocate type objects in your extension, you should be
|
||||||
aware of a change in the rules relating to the :attr:`!__module__` and
|
aware of a change in the rules relating to the :attr:`~type.__module__` and
|
||||||
:attr:`~definition.__name__` attributes. In summary, you will want to ensure the type's
|
:attr:`~type.__name__` attributes. In summary, you will want to ensure the type's
|
||||||
dictionary contains a ``'__module__'`` key; making the module name the part of
|
dictionary contains a ``'__module__'`` key; making the module name the part of
|
||||||
the type name leading up to the final period will no longer have the desired
|
the type name leading up to the final period will no longer have the desired
|
||||||
effect. For more detail, read the API reference documentation or the source.
|
effect. For more detail, read the API reference documentation or the source.
|
||||||
|
|
|
@ -1887,7 +1887,7 @@ New Features
|
||||||
|
|
||||||
The :c:macro:`Py_TPFLAGS_MANAGED_DICT` and :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF`
|
The :c:macro:`Py_TPFLAGS_MANAGED_DICT` and :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF`
|
||||||
flags have been added. This allows extensions classes to support object
|
flags have been added. This allows extensions classes to support object
|
||||||
``__dict__`` and weakrefs with less bookkeeping,
|
:attr:`~object.__dict__` and weakrefs with less bookkeeping,
|
||||||
using less memory and with faster access.
|
using less memory and with faster access.
|
||||||
|
|
||||||
* API for performing calls using
|
* API for performing calls using
|
||||||
|
@ -2006,7 +2006,7 @@ Porting to Python 3.12
|
||||||
internal-only field directly.
|
internal-only field directly.
|
||||||
|
|
||||||
To get a list of subclasses, call the Python method
|
To get a list of subclasses, call the Python method
|
||||||
:py:meth:`~class.__subclasses__` (using :c:func:`PyObject_CallMethod`,
|
:py:meth:`~type.__subclasses__` (using :c:func:`PyObject_CallMethod`,
|
||||||
for example).
|
for example).
|
||||||
|
|
||||||
* Add support of more formatting options (left aligning, octals, uppercase
|
* Add support of more formatting options (left aligning, octals, uppercase
|
||||||
|
@ -2025,7 +2025,7 @@ Porting to Python 3.12
|
||||||
:c:func:`PyUnicode_FromFormatV`.
|
:c:func:`PyUnicode_FromFormatV`.
|
||||||
(Contributed by Philip Georgi in :gh:`95504`.)
|
(Contributed by Philip Georgi in :gh:`95504`.)
|
||||||
|
|
||||||
* Extension classes wanting to add a ``__dict__`` or weak reference slot
|
* Extension classes wanting to add a :attr:`~object.__dict__` or weak reference slot
|
||||||
should use :c:macro:`Py_TPFLAGS_MANAGED_DICT` and
|
should use :c:macro:`Py_TPFLAGS_MANAGED_DICT` and
|
||||||
:c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` instead of ``tp_dictoffset`` and
|
:c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` instead of ``tp_dictoffset`` and
|
||||||
``tp_weaklistoffset``, respectively.
|
``tp_weaklistoffset``, respectively.
|
||||||
|
|
|
@ -121,9 +121,10 @@ Interpreter improvements:
|
||||||
|
|
||||||
Python data model improvements:
|
Python data model improvements:
|
||||||
|
|
||||||
* :attr:`~class.__static_attributes__` stores the names of attributes accessed
|
* :attr:`~type.__static_attributes__` stores the names of attributes accessed
|
||||||
through ``self.X`` in any function in a class body.
|
through ``self.X`` in any function in a class body.
|
||||||
* :attr:`!__firstlineno__` records the first line number of a class definition.
|
* :attr:`~type.__firstlineno__` records the first line number of a class
|
||||||
|
definition.
|
||||||
|
|
||||||
Significant improvements in the standard library:
|
Significant improvements in the standard library:
|
||||||
|
|
||||||
|
@ -588,7 +589,7 @@ Other Language Changes
|
||||||
(Contributed by Levi Sabah, Zackery Spytz and Hugo van Kemenade
|
(Contributed by Levi Sabah, Zackery Spytz and Hugo van Kemenade
|
||||||
in :gh:`73965`.)
|
in :gh:`73965`.)
|
||||||
|
|
||||||
* Classes have a new :attr:`~class.__static_attributes__` attribute.
|
* Classes have a new :attr:`~type.__static_attributes__` attribute.
|
||||||
This is populated by the compiler with a tuple of the class's attribute names
|
This is populated by the compiler with a tuple of the class's attribute names
|
||||||
which are assigned through ``self.<name>`` from any function in its body.
|
which are assigned through ``self.<name>`` from any function in its body.
|
||||||
(Contributed by Irit Katriel in :gh:`115775`.)
|
(Contributed by Irit Katriel in :gh:`115775`.)
|
||||||
|
@ -2191,13 +2192,13 @@ New Features
|
||||||
|
|
||||||
* Add the :c:func:`PyType_GetFullyQualifiedName` function
|
* Add the :c:func:`PyType_GetFullyQualifiedName` function
|
||||||
to get the type's fully qualified name.
|
to get the type's fully qualified name.
|
||||||
The module name is prepended if ``type.__module__`` is a string
|
The module name is prepended if :attr:`type.__module__` is
|
||||||
and is not equal to either ``'builtins'`` or ``'__main__'``.
|
a string and is not equal to either ``'builtins'`` or ``'__main__'``.
|
||||||
(Contributed by Victor Stinner in :gh:`111696`.)
|
(Contributed by Victor Stinner in :gh:`111696`.)
|
||||||
|
|
||||||
* Add the :c:func:`PyType_GetModuleName` function
|
* Add the :c:func:`PyType_GetModuleName` function
|
||||||
to get the type's module name.
|
to get the type's module name. This is equivalent to getting the
|
||||||
This is equivalent to getting the ``type.__module__`` attribute.
|
:attr:`type.__module__` attribute.
|
||||||
(Contributed by Eric Snow and Victor Stinner in :gh:`111696`.)
|
(Contributed by Eric Snow and Victor Stinner in :gh:`111696`.)
|
||||||
|
|
||||||
* Add the :c:func:`PyUnicode_EqualToUTF8AndSize`
|
* Add the :c:func:`PyUnicode_EqualToUTF8AndSize`
|
||||||
|
|
|
@ -549,9 +549,11 @@ separation of binary and text data).
|
||||||
PEP 3155: Qualified name for classes and functions
|
PEP 3155: Qualified name for classes and functions
|
||||||
==================================================
|
==================================================
|
||||||
|
|
||||||
Functions and class objects have a new ``__qualname__`` attribute representing
|
Functions and class objects have a new :attr:`~definition.__qualname__`
|
||||||
|
attribute representing
|
||||||
the "path" from the module top-level to their definition. For global functions
|
the "path" from the module top-level to their definition. For global functions
|
||||||
and classes, this is the same as ``__name__``. For other functions and classes,
|
and classes, this is the same as :attr:`~definition.__name__`.
|
||||||
|
For other functions and classes,
|
||||||
it provides better information about where they were actually defined, and
|
it provides better information about where they were actually defined, and
|
||||||
how they might be accessible from the global scope.
|
how they might be accessible from the global scope.
|
||||||
|
|
||||||
|
|
|
@ -2526,9 +2526,9 @@ Changes in the C API
|
||||||
to format the :func:`repr` of the object.
|
to format the :func:`repr` of the object.
|
||||||
(Contributed by Serhiy Storchaka in :issue:`22453`.)
|
(Contributed by Serhiy Storchaka in :issue:`22453`.)
|
||||||
|
|
||||||
* Because the lack of the :attr:`__module__` attribute breaks pickling and
|
* Because the lack of the :attr:`~type.__module__` attribute breaks pickling and
|
||||||
introspection, a deprecation warning is now raised for builtin types without
|
introspection, a deprecation warning is now raised for builtin types without
|
||||||
the :attr:`__module__` attribute. This would be an AttributeError in
|
the :attr:`~type.__module__` attribute. This will be an :exc:`AttributeError` in
|
||||||
the future.
|
the future.
|
||||||
(Contributed by Serhiy Storchaka in :issue:`20204`.)
|
(Contributed by Serhiy Storchaka in :issue:`20204`.)
|
||||||
|
|
||||||
|
|
|
@ -549,7 +549,7 @@ PEP 520: Preserving Class Attribute Definition Order
|
||||||
|
|
||||||
Attributes in a class definition body have a natural ordering: the same
|
Attributes in a class definition body have a natural ordering: the same
|
||||||
order in which the names appear in the source. This order is now
|
order in which the names appear in the source. This order is now
|
||||||
preserved in the new class's :attr:`~object.__dict__` attribute.
|
preserved in the new class's :attr:`~type.__dict__` attribute.
|
||||||
|
|
||||||
Also, the effective default class *execution* namespace (returned from
|
Also, the effective default class *execution* namespace (returned from
|
||||||
:ref:`type.__prepare__() <prepare>`) is now an insertion-order-preserving
|
:ref:`type.__prepare__() <prepare>`) is now an insertion-order-preserving
|
||||||
|
@ -934,7 +934,7 @@ asynchronous generators.
|
||||||
|
|
||||||
The :func:`~collections.namedtuple` function now accepts an optional
|
The :func:`~collections.namedtuple` function now accepts an optional
|
||||||
keyword argument *module*, which, when specified, is used for
|
keyword argument *module*, which, when specified, is used for
|
||||||
the ``__module__`` attribute of the returned named tuple class.
|
the :attr:`~type.__module__` attribute of the returned named tuple class.
|
||||||
(Contributed by Raymond Hettinger in :issue:`17941`.)
|
(Contributed by Raymond Hettinger in :issue:`17941`.)
|
||||||
|
|
||||||
The *verbose* and *rename* arguments for
|
The *verbose* and *rename* arguments for
|
||||||
|
|
|
@ -637,7 +637,8 @@ pydoc
|
||||||
-----
|
-----
|
||||||
|
|
||||||
The documentation string is now shown not only for class, function,
|
The documentation string is now shown not only for class, function,
|
||||||
method etc, but for any object that has its own ``__doc__`` attribute.
|
method etc, but for any object that has its own :attr:`~definition.__doc__`
|
||||||
|
attribute.
|
||||||
(Contributed by Serhiy Storchaka in :issue:`40257`.)
|
(Contributed by Serhiy Storchaka in :issue:`40257`.)
|
||||||
|
|
||||||
random
|
random
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Add only fields which are modified via self.* to :attr:`~class.__static_attributes__`.
|
Add only fields which are modified via self.* to :attr:`~type.__static_attributes__`.
|
||||||
|
|
Loading…
Reference in New Issue