attrs هي حزمة Python التي ستعيد متعة كتابة الفصول الدراسية من خلال تخليصك من عناء تنفيذ بروتوكولات الكائنات (المعروفة أيضًا باسم أساليب dunder). موثوق به من قبل وكالة ناسا لمهمات المريخ منذ عام 2020!
هدفها الرئيسي هو مساعدتك على كتابة برامج موجزة وصحيحة دون إبطاء التعليمات البرمجية الخاصة بك.
لن يكون هذا ممكنًا بدون رعاةنا الرائعين. وخاصة أولئك الذين يدعموننا بسخاء في مستوى المنظمة وما فوق:
يرجى النظر في الانضمام إليهم للمساعدة في جعل صيانة 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__
لطيف يمكن قراءته من قبل الإنسان،دون كتابة تعليمات برمجية نمطية باهتة مرارًا وتكرارًا ودون فرض عقوبات على الأداء في وقت التشغيل.
يستخدم هذا المثال واجهات برمجة التطبيقات الحديثة لـ attrs والتي تم تقديمها في الإصدار 20.1.0، واسم استيراد حزمة attrs الذي تمت إضافته في الإصدار 21.3.0. ستظل واجهات برمجة التطبيقات الكلاسيكية ( @attr.s
و attr.ib
بالإضافة إلى الأسماء المستعارة للأعمال الجادة) واسم استيراد حزمة attr
إلى أجل غير مسمى .
قم بمراجعة On The Core API Names للحصول على شرح متعمق!
لا مشكلة! الأنواع اختيارية تمامًا مع 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 لتقديم الدعم التجاري والصيانة للحزم مفتوحة المصدر التي تستخدمها لبناء تطبيقاتك. يمكنك توفير الوقت وتقليل المخاطر وتحسين سلامة التعليمات البرمجية، مع الدفع لمشرفي الحزم المحددة التي تستخدمها.