الدرس 7 من 10

خاصية تحرس قيمتها

هدف الدرس

إسناد يمرّ بالتحقّق

01

الشرح

الصفة العامة مثل t.celsius بسيطة، لكن أي سطر في البرنامج يستطيع أن يكتب فيها -300. و@property يحوّل الوصول إليها إلى استدعاء دالة مع بقاء الشكل نفسه: t.celsius للقراءة، وt.celsius = 30 يمرّ بدالة إسناد مُعلَّمة بـ@celsius.setter تتحقّق قبل أن تحفظ.

لذلك لا تكتب في بايثون دوال get_ وset_ مسبقًا: ابدأ بصفة عادية، وحين تحتاج التحقّق حوّلها إلى خاصية، فلا يتغيّر سطر واحد عند من يستعمل الصنف. والخاصية التي بلا دالة إسناد تصير للقراءة فقط، وتناسب القيم المحسوبة مثل fahrenheit.

والفخّ: داخل دالة الإسناد احفظ القيمة في اسم آخر مثل self._celsius. لو كتبت self.celsius = value لاستدعت الدالة نفسها بلا نهاية حتى RecursionError. أمّا في __init__ فاكتب self.celsius عمدًا، ليمرّ الإنشاء بالتحقّق نفسه.

02

المطلوب

اجعل celsius في Temperature خاصية ترمي ValueError لأي قيمة أقلّ من -273.15، عند الإنشاء وعند الإسناد، وأضف fahrenheit خاصية للقراءة فقط تساوي celsius * 9 / 5 + 32.

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

6 معايير
  1. celsius تُقرأ كصفة عادية
  2. fahrenheit محسوبة
  3. fahrenheit تتبع التعديل
  4. الإسناد تحت الصفر المطلق يرمي ValueError ولا يغيّر القيمة
  5. والإنشاء بقيمة مستحيلة مرفوض كذلك
  6. fahrenheit للقراءة فقط
main.py
المخرجاتPython · Pyodide

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

–/6

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

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