Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Python Classes Without Boilerplate

License

NotificationsYou must be signed in to change notification settings

python-attrs/attrs

Repository files navigation

attrs

DocumentationDownloads per monthDOI

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.

Sponsors

attrs would not be possible without ouramazing sponsors.Especially those generously supporting us at theThe Organization tier and higher:

Please considerjoining them to help makeattrs’s maintenance more sustainable!

Example

attrs gives you a class decorator and a way to declaratively define the attributes on that class:

>>>from attrsimport asdict, define, make_class, Factory>>>@define...classSomeClass:...     a_number:int=42...     list_of_numbers: list[int]= 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>>> asdict(sc){'a_number': 1, 'list_of_numbers': [1, 2, 3]}>>> SomeClass()SomeClass(a_number=42, list_of_numbers=[])>>> C= make_class("C", ["a","b"])>>> C("foo","bar")C(a='foo', b='bar')

Afterdeclaring your attributes,attrs gives you:

  • a concise and explicit overview of the class's attributes,
  • a nice human-readable__repr__,
  • equality-checking methods,
  • an initializer,
  • and much more,

without writing dull boilerplate code again and again andwithout runtime performance penalties.


This example usesattrs's modern APIs that have been introduced in version 20.1.0, and theattrs package import name that has been added in version 21.3.0.The classic APIs (@attr.s,attr.ib, plus their serious-business aliases) and theattr package import name will remainindefinitely.

Check outOn The Core API Names for an in-depth explanation!

Hate Type Annotations!?

No problem!Types are entirelyoptional withattrs.Simply assignattrs.field() to the attributes instead of annotating them with types:

fromattrsimportdefine,field@defineclassSomeClass:a_number=field(default=42)list_of_numbers=field(factory=list)

Data Classes

On the tin,attrs might remind you ofdataclasses (and indeed,dataclassesare a descendant ofattrs).In practice it does a lot more and is more flexible.For instance, it allows you to definespecial handling of NumPy arrays for equality checks, allows more ways toplug into the initialization process, has a replacement for__init_subclass__, and allows for stepping through the generated methods using a debugger.

For more details, please refer to ourcomparison page, but generally speaking, we are more likely to commit crimes against nature to make things work that one would expect to work, but that are quite complicated in practice.

Project Information

attrs for Enterprise

Available as part of theTidelift 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.


[8]ページ先頭

©2009-2025 Movatter.jp