2015-02-21 10:36:08 +00:00
======================================
attrs: Attributes without boilerplate.
======================================
2015-01-27 16:53:17 +00:00
.. image :: https://pypip.in/version/attrs/badge.svg
:target: https://pypi.python.org/pypi/attrs/
:alt: Latest Version
.. image :: https://travis-ci.org/hynek/attrs.svg
:target: https://travis-ci.org/hynek/attrs
:alt: CI status
.. image :: https://coveralls.io/repos/hynek/attrs/badge.png?branch=master
:target: https://coveralls.io/r/hynek/attrs?branch=master
:alt: Current coverage
2015-01-27 21:41:24 +00:00
.. teaser-begin
2015-01-27 16:53:17 +00:00
`` attrs `` is an `MIT <http://choosealicense.com/licenses/mit/> `_ -licensed Python package with class decorators that ease the chores of implementing the most common attribute-related object protocols:
.. code-block :: pycon
>>> import attr
>>> @attr.s
... class C(object):
2015-01-29 21:32:41 +00:00
... x = attr.ib(default=42)
2015-01-29 22:16:07 +00:00
... y = attr.ib(default=attr.Factory(list))
2015-01-27 16:53:17 +00:00
>>> i = C(x=1, y=2)
>>> i
2015-01-27 22:08:55 +00:00
C(x=1, y=2)
2015-01-27 16:53:17 +00:00
>>> i == C(1, 2)
True
>>> i != C(2, 1)
True
2015-01-29 20:50:07 +00:00
>>> attr.asdict(i)
2015-01-27 16:53:17 +00:00
{'y': 2, 'x': 1}
>>> C()
2015-01-27 22:08:55 +00:00
C(x=42, y=[])
2015-01-30 07:57:33 +00:00
>>> C2 = attr.make_class("C2", ["a", "b"])
>>> C2("foo", "bar")
C2(a='foo', b='bar')
2015-01-27 16:53:17 +00:00
2015-01-29 09:17:08 +00:00
(If you don’ t like the playful `` attr.s `` and `` attr.ib `` , you can also use their no-nonsense aliases `` attr.attributes `` and `` attr.attr `` ).
2015-01-27 16:53:17 +00:00
You just specify the attributes to work with and `` attrs `` gives you:
- a nice human-readable `` __repr__ `` ,
- a complete set of comparison methods,
2015-01-28 15:28:47 +00:00
- an initializer,
- and much more
2015-01-27 16:53:17 +00:00
*without* writing dull boilerplate code again and again.
This gives you the power to use actual classes with actual types in your code instead of confusing `` tuple ` ` \ s or confusingly behaving ` ` namedtuple ` ` \ s.
So put down that type-less data structures and welcome some class into your life!
2015-01-28 12:14:04 +00:00
.. note ::
I wrote an `explanation <https://attrs.readthedocs.org/en/latest/why.html#characteristic> `_ on why I forked my own `` characteristic `` .
It's not dead but `` attrs `` will have more new features.
2015-01-27 16:53:17 +00:00
`` attrs ` ` \ ’ s documentation lives at ` Read the Docs <https://attrs.readthedocs.org/> ` _, the code on ` GitHub <https://github.com/hynek/attrs> ` _.
It’ s rigorously tested on Python 2.6, 2.7, 3.3+, and PyPy.