attrs เป็นแพ็คเกจ Python ที่จะนำ ความสนุกสนาน ใน การเขียนคลาส กลับมาโดยช่วยให้คุณไม่ต้องยุ่งยากกับการนำ Object Protocol ไปใช้ (หรือที่เรียกว่า dunder method) ได้รับความไว้วางใจจาก NASA สำหรับภารกิจดาวอังคารตั้งแต่ปี 2020!
เป้าหมายหลักคือการช่วยให้คุณเขียนซอฟต์แวร์ ที่กระชับ และ ถูกต้อง โดยไม่ทำให้โค้ดของคุณช้าลง
attrs จะเป็นไปไม่ได้หากไม่มีผู้สนับสนุนที่น่าทึ่งของเรา โดยเฉพาะอย่างยิ่งผู้ที่สนับสนุนเราอย่างไม่เห็นแก่ตัวในระดับ The Organisation และสูงกว่า:
โปรดพิจารณาเข้าร่วมเพื่อช่วยให้การบำรุงรักษาของ Attrs มีความยั่งยืนมากขึ้น!
attrs ให้เครื่องมือตกแต่งคลาสแก่คุณและวิธีการกำหนดคุณลักษณะของคลาสนั้นอย่างเปิดเผย:
>>> 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')
หลังจาก ประกาศ คุณลักษณะของคุณแล้ว attrs จะให้:
__repr__
,โดยไม่ต้อง เขียนโค้ดสำเร็จรูปซ้ำแล้วซ้ำอีก และ ไม่มี การลงโทษด้านประสิทธิภาพรันไทม์
ตัวอย่างนี้ใช้ API สมัยใหม่ของ attrs ที่เปิดตัวในเวอร์ชัน 20.1.0 และชื่อการนำเข้าแพ็คเกจ attrs ที่เพิ่มในเวอร์ชัน 21.3.0 API แบบคลาสสิก ( @attr.s
, attr.ib
รวมถึงนามแฝงทางธุรกิจที่จริงจัง) และชื่อการนำเข้าแพ็คเกจ attr
จะยังคงอยู่ อย่างไม่มีกำหนด
ตรวจสอบ ชื่อ Core API สำหรับคำอธิบายเชิงลึก!
ไม่มีปัญหา! ประเภทเป็น ทางเลือก ทั้งหมดด้วย attrs เพียงกำหนด attrs.field()
ให้กับแอตทริบิวต์แทนที่จะใส่คำอธิบายประกอบด้วยประเภท:
from attrs import define , field
@ define
class SomeClass :
a_number = field ( default = 42 )
list_of_numbers = field ( factory = list )
บนดีบุก attrs อาจเตือนคุณถึง dataclasses
(และแท้จริงแล้ว dataclasses
เป็นผู้สืบทอดของ attrs ) ในทางปฏิบัติมันทำได้มากกว่าและยืดหยุ่นกว่ามาก ตัวอย่างเช่น ช่วยให้คุณสามารถกำหนดการจัดการพิเศษของอาร์เรย์ NumPy สำหรับการตรวจสอบความเท่าเทียมกัน อนุญาตให้มีวิธีเพิ่มเติมในการเชื่อมต่อกับกระบวนการเริ่มต้น มีการแทนที่ __init_subclass__
และอนุญาตให้ก้าวผ่านวิธีการที่สร้างขึ้นโดยใช้ดีบักเกอร์
สำหรับรายละเอียดเพิ่มเติม โปรดดูหน้าการเปรียบเทียบของเรา แต่โดยทั่วไปแล้ว เรามีแนวโน้มที่จะก่ออาชญากรรมต่อธรรมชาติเพื่อทำให้สิ่งต่าง ๆ เป็นไปตามที่ใครๆ คาดว่าจะได้ผล แต่ค่อนข้างซับซ้อนในทางปฏิบัติ
python-attrs
บน Stack Overflowมีให้เป็นส่วนหนึ่งของการสมัครสมาชิก Tidelift
ผู้ดูแล attrs และแพ็คเกจอื่น ๆ หลายพันรายการกำลังทำงานร่วมกับ Tidelift เพื่อให้การสนับสนุนเชิงพาณิชย์และการบำรุงรักษาสำหรับแพ็คเกจโอเพ่นซอร์สที่คุณใช้ในการสร้างแอปพลิเคชันของคุณ ประหยัดเวลา ลดความเสี่ยง และปรับปรุงประสิทธิภาพของโค้ด ในขณะเดียวกันก็จ่ายเงินให้กับผู้ดูแลแพ็คเกจที่คุณใช้