الدرس 8 من 10

طرق إنشاء بديلة

هدف الدرس

دالة إنشاء باسم واضح لكل شكل من المدخلات

01

الشرح

الدالة __init__ طريق واحد لإنشاء الكائن، لكن البيانات تصل بأشكال كثيرة، كنصّ مثل "1.4.2" من ملف إعدادات، أو قاموس من JSON، وإذا حاولت أن تعالج كل هذه الأشكال داخلها امتلأت بفحوص isinstance. والبديل أن تضيف طرقًا أخرى للإنشاء لها أسماء واضحة، مثل Version.from_string("1.4.2").

وهذا ما يفعله @classmethod، فهو يجعل الدالة تستقبل الصنف نفسه في cls بدل الكائن، فتحلّل المدخلات ثم تُرجع cls(...). أمّا @staticmethod فتضعه فوق دالة لا تحتاج إلى self ولا إلى cls، لكنها تخصّ الصنف فتكتبها داخله، مثل دالة تفحص صحّة النصّ قبل تحليله.

والفخّ أن تكتب return Version(...) داخل دالة الصنف، فتعمل اليوم، ثم يرث أحدهم الصنف فيحصل من from_string على Version وليس على كائن من صنفه هو، أمّا cls فهو الصنف الذي استُدعيت عليه الدالة فعلًا.

02

المطلوب

أضف إلى Version دالة is_valid(text) من نوع staticmethod لا تقبل إلا ثلاثة أعداد بينها نقاط، ودالة from_string(text) من نوع classmethod ترفع ValueError إذا كان النصّ غير صالح، وتُرجع كائنًا من cls.

الفحوص

6 فحوص
  1. الدالة from_string تحلّل النصّ إلى أعداد
  2. الصنف الابن يحصل على كائن من نوعه
  3. الدالة from_string ترفع ValueError للنصّ غير الصالح
  4. الدالة is_valid تقبل الإصدار الصحيح
  5. الدالة is_valid ترفض النصّ الناقص وغير الرقمي
  6. الدالة is_valid تعمل من الكائن أيضًا
main.py
المخرجاتPython (Pyodide)

نحمّل بيئة Python الآن. يحدث هذا مرّة واحدة فقط، ثم يحفظها متصفّحك.

–/6

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

تجد 6 فحوص في بطاقة «المطلوب».