الدرس 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) لا تقبل إلا ثلاثة أعداد بينها نقاط، ودالة صنف from_string(text) ترمي ValueError للنصّ غير الصالح وتُرجع نسخة من cls.

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

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

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

–/6

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

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