attrs: Classes Without Boilerplate

Release v21.2.0 (What's new?).

attrs is the Python package that will bring back the joy of writing classes by relieving you from the drudgery of implementing object protocols (aka dunder methods). Trusted by NASA for Mars missions since 2020!

Its main goal is to help you to write concise and correct software without slowing down your code.

Getting Started

attrs is a Python-only package hosted on PyPI. The recommended installation method is pip-installing into a virtualenv:

$ python -m pip install attrs

The next three steps should bring you up and running in no time:

  • Overview will show you a simple example of attrs in action and introduce you to its philosophy. Afterwards, you can start writing your own classes, understand what drives attrs’s design, and know what @attr.s and attr.ib() stand for.

  • attrs by Example will give you a comprehensive tour of attrs’s features. After reading, you will know about our advanced features and how to use them.

  • Finally Why not… gives you a rundown of potential alternatives and why we think attrs is superior. Yes, we’ve heard about namedtuples and Data Classes!

  • If at any point you get confused by some terminology, please check out our Glossary.

If you need any help while getting started, feel free to use the python-attrs tag on StackOverflow and someone will surely help you out!

Day-to-Day Usage

  • Type Annotations help you to write correct and self-documenting code. attrs has first class support for them and even allows you to drop the calls to attr.ib on modern Python versions!

  • Instance initialization is one of attrs key feature areas. Our goal is to relieve you from writing as much code as possible. Initialization gives you an overview what attrs has to offer and explains some related philosophies we believe in.

  • Comparing and ordering objects is a common task. Comparison shows you how attrs helps you with that and how you can customize it.

  • If you want to put objects into sets or use them as keys in dictionaries, they have to be hashable. The simplest way to do that is to use frozen classes, but the topic is more complex than it seems and Hashing will give you a primer on what to look out for.

  • Once you’re comfortable with the concepts, our API Reference contains all information you need to use attrs to its fullest.

  • attrs is built for extension from the ground up. Extending will show you the affordances it offers and how to make it a building block of your own projects.

Getting Help

Please use the python-attrs tag on StackOverflow to get help.

Answering questions of your fellow developers is also a great way to help the project!


Project Information

attrs is released under the MIT license, its documentation lives at Read the Docs, the code on GitHub, and the latest release on PyPI. It’s rigorously tested on Python 2.7, 3.5+, and PyPy.

We collect information on third-party extensions in our wiki. Feel free to browse and add your own!

If you’d like to contribute to attrs you’re most welcome and we’ve written a little guide to get you started!

attrs for Enterprise

Available as part of the Tidelift Subscription.

The maintainers of attrs and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use. Learn more.

Indices and tables