attrs/docs/api-attr.rst

249 lines
5.4 KiB
ReStructuredText
Raw Permalink Normal View History

API Reference for the ``attr`` Namespace
========================================
.. note::
These are the traditional APIs whose creation predates type annotations.
They are **not** deprecated, but we suggest using the :mod:`attrs` namespace for new code, because they look nicer and have better defaults.
See also :doc:`names`.
.. module:: attr
Core
----
.. autofunction:: attr.s(these=None, repr_ns=None, repr=None, cmp=None, hash=None, init=None, slots=False, frozen=False, weakref_slot=True, str=False, auto_attribs=False, kw_only=False, cache_hash=False, auto_exc=False, eq=None, order=None, auto_detect=False, collect_by_mro=False, getstate_setstate=None, on_setattr=None, field_transformer=None, match_args=True, unsafe_hash=None)
For example:
.. doctest::
>>> import attr
>>> @attr.s
... class C:
... _private = attr.ib()
>>> C(private=42)
C(_private=42)
>>> class D:
... def __init__(self, x):
... self.x = x
>>> D(1)
<D object at ...>
>>> D = attr.s(these={"x": attr.ib()}, init=False)(D)
>>> D(1)
D(x=1)
>>> @attr.s(auto_exc=True)
... class Error(Exception):
... x = attr.ib()
... y = attr.ib(default=42, init=False)
>>> Error("foo")
Error(x='foo', y=42)
>>> raise Error("foo")
Traceback (most recent call last):
...
Error: ('foo', 42)
>>> raise ValueError("foo", 42) # for comparison
Traceback (most recent call last):
...
ValueError: ('foo', 42)
.. autofunction:: attr.ib
.. note::
*attrs* also comes with a serious-business alias ``attr.attrib``.
The object returned by `attr.ib` also allows for setting the default and the validator using decorators:
.. doctest::
>>> @attr.s
... class C:
... x = attr.ib()
... y = attr.ib()
... @x.validator
... def _any_name_except_a_name_of_an_attribute(self, attribute, value):
... if value < 0:
... raise ValueError("x must be positive")
... @y.default
... def _any_name_except_a_name_of_an_attribute(self):
... return self.x + 1
>>> C(1)
C(x=1, y=2)
>>> C(-1)
Traceback (most recent call last):
...
ValueError: x must be positive
.. function:: attrs
Serious business alias for `attr.s`.
.. function:: define
Same as `attrs.define`.
.. function:: mutable
Same as `attrs.mutable`.
.. function:: frozen
Same as `attrs.frozen`.
.. function:: field
Same as `attrs.field`.
.. class:: Attribute
Same as `attrs.Attribute`.
.. function:: make_class
Same as `attrs.make_class`.
.. autoclass:: Factory
:noindex:
Same as `attrs.Factory`.
.. data:: NOTHING
Same as `attrs.NOTHING`.
Exceptions
----------
.. module:: attr.exceptions
All exceptions are available from both ``attr.exceptions`` and `attrs.exceptions` (it's the same module in a different namespace).
Please refer to `attrs.exceptions` for details.
Helpers
-------
.. currentmodule:: attr
.. function:: cmp_using
Same as `attrs.cmp_using`.
.. function:: fields
Same as `attrs.fields`.
.. function:: fields_dict
Same as `attrs.fields_dict`.
.. function:: has
Same as `attrs.has`.
.. function:: resolve_types
Same as `attrs.resolve_types`.
.. autofunction:: asdict
.. autofunction:: astuple
.. module:: attr.filters
.. function:: include
Same as `attrs.filters.include`.
.. function:: exclude
Same as `attrs.filters.exclude`.
See :func:`attrs.asdict` for examples.
All objects from `attrs.filters` are also available in ``attr.filters``.
----
.. currentmodule:: attr
.. function:: evolve
Same as `attrs.evolve`.
.. function:: validate
Same as `attrs.validate`.
Validators
----------
.. module:: attr.validators
All objects from `attrs.validators` are also available in ``attr.validators``.
Please refer to the former for details.
Converters
----------
.. module:: attr.converters
All objects from `attrs.converters` are also available from ``attr.converters``.
Please refer to the former for details.
Setters
-------
.. module:: attr.setters
All objects from `attrs.setters` are also available in ``attr.setters``.
Please refer to the former for details.
Deprecated APIs
---------------
.. currentmodule:: attr
To help you write backward compatible code that doesn't throw warnings on modern releases, the ``attr`` module has an ``__version_info__`` attribute as of version 19.2.0.
It behaves similarly to `sys.version_info` and is an instance of `attr.VersionInfo`:
.. autoclass:: VersionInfo
With its help you can write code like this:
>>> if getattr(attr, "__version_info__", (0,)) >= (19, 2):
... cmp_off = {"eq": False}
... else:
... cmp_off = {"cmp": False}
>>> cmp_off == {"eq": False}
True
>>> @attr.s(**cmp_off)
... class C:
... pass
----
.. autofunction:: assoc
Before *attrs* got `attrs.validators.set_disabled` and `attrs.validators.set_disabled`, it had the following APIs to globally enable and disable validators.
They won't be removed, but are discouraged to use:
.. autofunction:: set_run_validators
.. autofunction:: get_run_validators
----
The serious-business aliases used to be called ``attr.attributes`` and ``attr.attr``.
There are no plans to remove them but they shouldn't be used in new code.