attrs est le package Python qui ramènera la joie d' écrire des cours en vous soulageant de la corvée d'implémentation de protocoles objets (alias méthodes dunder). Reconnu par la NASA pour les missions sur Mars depuis 2020 !
Son objectif principal est de vous aider à écrire des logiciels concis et corrects sans ralentir votre code.
les attrs ne seraient pas possibles sans nos incroyables sponsors. Surtout ceux qui nous soutiennent généreusement au niveau Organisation et supérieur :
N'hésitez pas à les rejoindre pour contribuer à rendre la maintenance d' attrs plus durable !
attrs vous donne un décorateur de classe et un moyen de définir de manière déclarative les attributs de cette classe :
>>> from attrs import asdict, define, make_class, Factory
>>> @ define
... class SomeClass :
... a_number: int = 42
... list_of_numbers: list[ int ] = Factory( list )
...
... def hard_math ( self , another_number ):
... return self .a_number + sum ( self .list_of_numbers) * another_number
>>> sc = SomeClass( 1 , [ 1 , 2 , 3 ])
>>> sc
SomeClass(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')
Après avoir déclaré vos attributs, attrs vous donne :
__repr__
lisible par l'homme,sans écrire encore et encore du code passe-partout ennuyeux et sans pénalités de performances d'exécution.
Cet exemple utilise les API modernes de attrs qui ont été introduites dans la version 20.1.0 et le nom d'importation du package attrs qui a été ajouté dans la version 21.3.0. Les API classiques ( @attr.s
, attr.ib
, ainsi que leurs alias sérieux) et le nom d'importation du package attr
resteront indéfiniment .
Consultez On The Core API Names pour une explication détaillée !
Aucun problème! Les types sont entièrement facultatifs avec attrs . Attribuez simplement attrs.field()
aux attributs au lieu de les annoter avec des types :
from attrs import define , field
@ define
class SomeClass :
a_number = field ( default = 42 )
list_of_numbers = field ( factory = list )
En fait, attrs peut vous rappeler les dataclasses
(et en effet, dataclasses
sont un descendant de attrs ). En pratique, il fait beaucoup plus et est plus flexible. Par exemple, il vous permet de définir une gestion spéciale des tableaux NumPy pour les contrôles d'égalité, autorise davantage de façons de se connecter au processus d'initialisation, remplace __init_subclass__
et permet de parcourir les méthodes générées à l'aide d'un débogueur.
Pour plus de détails, veuillez vous référer à notre page de comparaison, mais de manière générale, nous sommes plus susceptibles de commettre des crimes contre la nature pour faire fonctionner les choses que l'on pourrait attendre, mais qui sont assez compliqués en pratique.
python-attrs
sur Stack OverflowDisponible dans le cadre de l’abonnement Tidelift.
Les responsables d' attrs et de milliers d'autres packages travaillent avec Tidelift pour fournir un support commercial et une maintenance pour les packages open source que vous utilisez pour créer vos applications. Gagnez du temps, réduisez les risques et améliorez la santé du code, tout en payant les responsables des packages exacts que vous utilisez.