attrs adalah paket Python yang akan mengembalikan kegembiraan menulis kelas dengan membebaskan Anda dari kerumitan mengimplementasikan protokol objek (alias metode dunder). Dipercaya NASA untuk misi Mars sejak 2020!
Tujuan utamanya adalah membantu Anda menulis perangkat lunak yang ringkas dan benar tanpa memperlambat kode Anda.
attrs tidak akan mungkin terjadi tanpa sponsor kami yang luar biasa. Terutama mereka yang dengan murah hati mendukung kami di tingkat Organisasi dan lebih tinggi:
Harap pertimbangkan untuk bergabung dengan mereka untuk membantu membuat pemeliharaan attrs lebih berkelanjutan!
attrs memberi Anda dekorator kelas dan cara untuk mendefinisikan atribut pada kelas itu secara deklaratif:
>>> 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')
Setelah mendeklarasikan atribut Anda, attrs memberi Anda:
__repr__
bagus yang dapat dibaca manusia,tanpa menulis kode boilerplate yang membosankan lagi dan lagi dan tanpa penalti kinerja runtime.
Contoh ini menggunakan API modern attrs yang telah diperkenalkan di versi 20.1.0, dan nama impor paket attrs yang telah ditambahkan di versi 21.3.0. API klasik ( @attr.s
, attr.ib
, ditambah alias bisnis seriusnya) dan nama impor paket attr
akan tetap ada tanpa batas waktu .
Lihat Nama API Inti untuk penjelasan mendalam!
Tidak masalah! Jenis sepenuhnya opsional dengan attrs . Cukup tetapkan attrs.field()
ke atribut alih-alih membubuhi keterangan dengan tipe:
from attrs import define , field
@ define
class SomeClass :
a_number = field ( default = 42 )
list_of_numbers = field ( factory = list )
Sekilas, attrs mungkin mengingatkan Anda pada dataclasses
(dan memang, dataclasses
adalah turunan dari attrs ). Dalam praktiknya, hal ini lebih efektif dan lebih fleksibel. Misalnya, ini memungkinkan Anda untuk menentukan penanganan khusus array NumPy untuk pemeriksaan kesetaraan, memungkinkan lebih banyak cara untuk menyambungkan ke dalam proses inisialisasi, memiliki pengganti __init_subclass__
, dan memungkinkan untuk menelusuri metode yang dihasilkan menggunakan debugger.
Untuk rincian lebih lanjut, silakan merujuk ke halaman perbandingan kami, namun secara umum, kita lebih cenderung melakukan kejahatan terhadap alam untuk membuat segala sesuatunya berjalan sesuai harapan, namun dalam praktiknya cukup rumit.
python-attrs
di Stack OverflowTersedia sebagai bagian dari Langganan Tidelift.
Pengelola attrs dan ribuan paket lainnya bekerja sama dengan Tidelift untuk memberikan dukungan komersial dan pemeliharaan untuk paket sumber terbuka yang Anda gunakan untuk membangun aplikasi Anda. Menghemat waktu, mengurangi risiko, dan meningkatkan kesehatan kode, sekaligus membayar pengelola paket yang sama persis dengan yang Anda gunakan.