مكتبة attrs
قارن بين attrs وdataclasses
مكتبة attrs درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
ما هي attrs؟
إن attrs مكتبة من جهات خارجية ابتكرت فكرة إنشاء الفئة من الحقول قبل سنوات من إضافة dataclasses إلى المكتبة القياسية. وقد استُلهمت وحدة dataclasses القياسية منها مباشرةً.
- تتطلب attrs تثبيتًا منفصلًا:
pip install attrs. - توفّر ميزات أكثر من dataclasses.
- تأتي dataclasses مضمّنة وتغطي معظم الاحتياجات اليومية.
واجهة attrs الحديثة
تستخدم attrs الحديثة @define وfield() من مساحة أسماء attrs. وبنيتها مشابهة جدًا لبنية فئة البيانات.
from attrs import define, field
@define
class Point:
x: int
y: int
p = Point(1, 2)
print(p)الفتحات تلقائيًا
هناك فرق كبير: تستخدم الفئات التي تحمل @define __slots__ تلقائيًا. ويقلل ذلك من استهلاك الذاكرة ويمنع إضافة سمات غير مصرّح بها عن طريق الخطأ. أما فئات البيانات العادية فتستخدم __dict__ عاديًا، ما لم تمرروا slots=True (في Python 3.10 أو أحدث).
أدوات التحقق المضمّنة
تأتي attrs مزوّدة بأدوات تحقق جاهزة. ويمكن للحقل التصريح بأداة تحقق تُشغّل أثناء الإنشاء وتُطلق خطأً إذا كانت القيمة غير صالحة. ولا تحتوي dataclasses على تحقق مضمّن؛ بل تكتبونه بأنفسكم في __post_init__.
from attrs import define, field
from attrs.validators import instance_of
@define
class User:
age: int = field(validator=instance_of(int))
User(30) # ok
User('oops') # raises TypeErrorالمحوّلات
يحوّل المحوّل قيمة الإدخال قبل تخزينها. فعلى سبيل المثال، يمكنه تحويل سلسلة نصية إلى عدد صحيح تلقائيًا. وهذه ميزة أخرى لا توفرها dataclasses.
from attrs import define, field
@define
class Item:
price: int = field(converter=int)
i = Item('42') # stored as the integer 42
print(i.price)المكافئ في dataclasses
إليكم الفكرة نفسها باستخدام المكتبة القياسية. توضع عملية التحقق والتحويل يدويًا في __post_init__، لأن dataclasses لا توفر نقاط ربط لكل حقل.
from dataclasses import dataclass
@dataclass
class Item:
price: int
def __post_init__(self):
self.price = int(self.price)
print(Item('42'))asdict في كلتا المكتبتين
توفر المكتبتان مساعدًا باسم asdict. يوجد مساعد dataclass في dataclasses، بينما يوجد مساعد attrs في attrs. وسلوكه متطابق تقريبًا في المكتبتين.
from dataclasses import dataclass, asdict
@dataclass
class Point:
x: int
y: int
print(asdict(Point(1, 2)))التجميد في attrs
تدعم attrs عدم القابلية للتغيير أيضًا. استخدموا @frozen (وهو اختصار لـ @define(frozen=True)) لإنشاء مثيلات للقراءة فقط، بما يحاكي @dataclass(frozen=True).
from attrs import frozen
@frozen
class Point:
x: int
y: int
p = Point(1, 2)
print(p)
# p.x = 9 would raise FrozenInstanceErrorمقارنة الميزات
إليك كيفية المقارنة بينهما:
- dataclasses: جزء من المكتبة القياسية، ولا يتطلب تثبيتًا، ويغطي الأساسيات.
- attrs: يوفر أدوات تحقق ومحوّلات وفتحات تلقائيًا، مع خيارات إعداد أكثر.
- تنشئ المكتبتان
__init__و__repr__و__eq__.
أيهما ينبغي أن تستخدموا؟
اختاروا dataclasses لحوامل البيانات البسيطة التي لا تتطلب اعتمادًا إضافيًا. واختاروا attrs عندما تحتاجون إلى أدوات تحقق أو محوّلات أو خيارات إعداد أكثر شمولًا، وتكونون مستعدين لإضافة اعتماد. تبدأ العديد من المشاريع باستخدام dataclasses، ولا تنتقل إلى غيرها إلا إذا تجاوزت احتياجاتها.
أصل مشترك
نظرًا إلى أن dataclasses اقتبست الكثير من attrs، يكون الانتقال بينهما عادةً آليًا: بدّلوا تعليمة الاستيراد والمزيّن، وعدّلوا أدوات التحقق أو المحوّلات. فمعرفة إحداهما تجعل الأخرى مألوفة لكم مباشرةً.
- يقابل
@defineالمزيّن@dataclass. - يقابل
attrs.fielddataclasses.field. - تُنقل أدوات التحقق إلى
__post_init__عند الانتقال إلى dataclasses.
اختبار سريع
ما القدرة التي توفرها attrs ولا توفرها وحدة dataclasses القياسية مضمّنة؟
مراجعة
قارنتم بين attrs وdataclasses.
- ألهمت attrs تصميم dataclasses وتوفر ميزات أكثر.
- تضيف attrs أدوات تحقق ومحوّلات وفتحات تلقائيًا.
- تأتي dataclasses مضمّنة ولا تتطلب تثبيتًا.
- اختاروا أبسط أداة تلبي احتياجاتكم.
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 76
- الدروس
- 320
الأسئلة الشائعة
هل درس «مكتبة attrs» مجاني؟
نعم — نص درس «مكتبة attrs» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «مكتبة attrs»؟
قارن بين attrs وdataclasses تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «مكتبة attrs»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.