249 lines
5.4 KiB
ReStructuredText
249 lines
5.4 KiB
ReStructuredText
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.
|