Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork411
Python Classes Without Boilerplate
License
python-attrs/attrs
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
attrs is the Python package that will bring back thejoy ofwriting classes by relieving you from the drudgery of implementing object protocols (akadunder methods).Trusted by NASA for Mars missions since 2020!
Its main goal is to help you to writeconcise andcorrect software without slowing down your code.
For that, it gives you a class decorator and a way to declaratively define the attributes on that class:
>>>import attr>>>@attr.s...classSomeClass(object):... a_number= attr.ib(default=42)... list_of_numbers= attr.ib(factory=list)......defhard_math(self,another_number):...returnself.a_number+sum(self.list_of_numbers)* another_number>>> sc= SomeClass(1, [1,2,3])>>> scSomeClass(a_number=1, list_of_numbers=[1, 2, 3])>>> sc.hard_math(3)19>>> sc== SomeClass(1, [1,2,3])True>>> sc!= SomeClass(2, [3,2,1])True>>> attr.asdict(sc){'a_number': 1, 'list_of_numbers': [1, 2, 3]}>>> SomeClass()SomeClass(a_number=42, list_of_numbers=[])>>> C= attr.make_class("C", ["a","b"])>>> C("foo","bar")C(a='foo', b='bar')
Afterdeclaring your attributesattrs gives you:
- a concise and explicit overview of the class's attributes,
- a nice human-readable
__repr__, - a complete set of comparison methods (equality and ordering),
- an initializer,
- and much more,
without writing dull boilerplate code again and again andwithout runtime performance penalties.
On Python 3.6 and later, you can often even drop the calls toattr.ib() by usingtype annotations.
This gives you the power to use actual classes with actual types in your code instead of confusingtuples orconfusingly behavingnamedtuples.Which in turn encourages you to writesmall classes that doone thing well.Never again violate thesingle responsibility principle just because implementing__init__ et al is a painful drag.
Please use thepython-attrs tag onStackOverflow to get help.
Answering questions of your fellow developers is also a great way to help the project!
attrs is released under theMIT license,its documentation lives atRead the Docs,the code onGitHub,and the latest release onPyPI.It’s rigorously tested on Python 2.7, 3.5+, and PyPy.
We collect information onthird-party extensions in ourwiki.Feel free to browse and add your own!
If you'd like to contribute toattrs you're most welcome and we've writtena little guide to get you started!
Available as part of the Tidelift Subscription.
The maintainers ofattrs 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.
About
Python Classes Without Boilerplate
Topics
Resources
License
Code of conduct
Contributing
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.