الدرس 2 من 10
كائن يصف نفسه
- 11 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
الدالة repr للمطوّر وstr للمستخدم
الشرح
إذا طبعت كائنًا من صنف كتبته للتوّ فسترى شيئًا مثل <Money object at 0x7f3a…>، أي اسم الصنف وعنوانًا في الذاكرة، ولا شيء عن محتواه، وهذا ما سيظهر لك في السجلّات ورسائل الخطأ حين تحتاج إليها.
وتفرّق Python بين طريقتين لعرض الكائن نصًّا، فـ __str__ للمستخدم، وتُرجع نصًّا مقروءًا مثل 50 SAR، وهي التي يستدعيها print وstr(). أما __repr__ فللمطوّر، وتُرجع نصًّا واضحًا لا لبس فيه، وأفضله ما يطابق سطر الإنشاء نفسه: Money(50, 'SAR'). واكتب فيه !r بعد كل حقل، فيظهر النصّ '50' بين علامتي اقتباس ولا يختلط بالعدد 50.
والفخّ أن القوائم والقواميس تعرض عناصرها بـrepr دائمًا، حتى داخل print، فمن كتب __str__ وحدها ثم طبع قائمة عادت إليه العناوين الغامضة. وإذا لم تكتب __str__ استعملت Python __repr__ مكانها، والعكس لا يحدث، لذلك إن كتبت دالة واحدة فقط فلتكن __repr__.
المطلوب
أضف إلى Money دالة __repr__ تُرجع Money(50, 'SAR')، ودالة __str__ تُرجع 50 SAR.
الفحوص
5 فحوص- ناتج repr يطابق سطر الإنشاء
- ناتج repr يميّز النصّ من العدد
- ناتج str نصّ مقروء
- القائمة تعرض repr عناصرها
- التعبير eval(repr(m)) يعيد بناء الكائن