الدرس 5 من 10

أصناف البيانات

هدف الدرس

الحقول تكفي والباقي مولَّد

01

الشرح

أغلب الأصناف تحمل بيانات فقط: __init__ ينسخ المعاملات إلى self، ثم تكرّر __repr__ و__eq__ الحقول نفسها. وحين تضيف حقلًا وتنسى تحديث __eq__ يصير الخطأ صامتًا.

@dataclass يولّد هذه الدوال من الحقول المُعلَنة بأنواعها. تكتب done: bool = False فيصير معاملًا بقيمة افتراضية، وتحصل على repr يعرض الحقول ومقارنة بالقيمة بلا سطر إضافي. وfrozen=True يمنع التعديل بعد الإنشاء، ويجعل الكائن صالحًا للمجموعات ولمفاتيح القواميس.

وهو يحميك من فخّ قديم: القيمة الافتراضية القابلة للتغيير. tags=[] في __init__ تُنشأ مرّة واحدة عند تعريف الدالة، فتتشاركها كل الكائنات. لذلك يرفضها @dataclass، والبديل field(default_factory=list) الذي يصنع قائمة جديدة لكل كائن.

02

المطلوب

حوّل Task إلى dataclass بالحقول title وdone (افتراضيًّا False) وtags (قائمة جديدة لكل مهمّة)، وحوّل Tag إلى dataclass مجمَّد بالحقلين name وcolor (افتراضيًّا "رمادي").

معايير التصحيح

6 معايير
  1. المهمّة الجديدة بقيمها الافتراضية
  2. لكل مهمّة قائمة وسوم مستقلّة
  3. repr مولَّد يعرض الحقول
  4. المقارنة بالقيمة
  5. Tag لا يُعدَّل بعد إنشائه
  6. Tag يصلح عنصرًا في مجموعة
main.py
المخرجاتPython · Pyodide

جارٍ تحميل بيئة بايثون… تُحمَّل مرّة واحدة ثم يحفظها المتصفح.

–/6

يبدأ الفحص حين تجهز البيئة.

6 معايير في بطاقة «المطلوب».