الدرس 8 من 10
طرق إنشاء بديلة
- 12 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
باب مسمّى لكل شكل من المُدخلات
الشرح
__init__ باب واحد للإنشاء، والبيانات تصل بأشكال كثيرة: نصّ مثل "1.4.2" من ملف إعدادات، أو قاموس من JSON. وحشر كل الأشكال فيه يملؤه بفحوص isinstance. والبديل أبواب إضافية لها أسماء واضحة: Version.from_string("1.4.2").
هذا ما يفعله @classmethod: دالة تستقبل الصنف نفسه cls بدل النسخة، فتحلّل المُدخل ثم تُرجع cls(...). أمّا @staticmethod فدالة لا تحتاج self ولا cls، مكانها الصنف لأنها تخصّه، مثل فحص صحّة النصّ قبل تحليله.
والفخّ: أن تكتب return Version(...) داخل دالة الصنف. تعمل اليوم، ثم يرث أحدهم الصنف فيحصل من from_string على Version لا على صنفه هو. أمّا cls فهو الصنف الذي استُدعيت عليه الدالة فعلًا.
المطلوب
أضف إلى Version دالة ثابتة is_valid(text) لا تقبل إلا ثلاثة أعداد بينها نقاط، ودالة صنف from_string(text) ترمي ValueError للنصّ غير الصالح وتُرجع نسخة من cls.
معايير التصحيح
6 معايير- from_string تحلّل النصّ إلى أعداد
- الصنف الفرعي يحصل على نسخة من نوعه
- from_string ترمي ValueError للنصّ الفاسد
- is_valid تقبل الإصدار الصحيح
- is_valid ترفض الناقص وغير الرقمي
- is_valid تعمل من النسخة أيضًا