ما هي دالة __str__ في Python؟
تنبيه: هذا الدرس محتوى إضافي اختياري. يتناول هذا الدرس الأصناف والكائنات والأساليب الخاصة، وهي مفاهيم لم تُشرح بشكل رسمي في الدورة بعد. إذا كان أيٌّ من هذه المفاهيم غير مألوف لديك، فلا تقلق، يمكنك تخطي هذا الدرس والعودة إليه لاحقًا بعد أن تتعرف على الأصناف. لا يعتمد أي شيء في الدروس أو الاختبارات القادمة على هذا الدرس. إذا كنت ترغب في إلقاء نظرة سريعة على كيفية تمثيل Python للكائنات كسلاسل نصية، فتابع القراءة!
ال__str__ تمثل هذه الطريقة كائنات الفئة كسلسلة نصية. يجب تعريفها بحيث يكون إخراج سهل القراءة ويتضمن الأعضاء ذات الصلة بالفئة، مما يجعلها مفيدة أيضًا كأداة لتصحيح الأخطاء عند الحاجة إلى فحص محتويات الكائن.
Python تلقائيًا باستدعاء__str__ عند استخدام أي مما يلي على كائن ما:
print(obj)str(obj)obj.__str__()
لو__str__ إذا لم يتم تعريفها في الفئة، فسيلجأ Python إلى__repr__ بدلاً من ذلك. بشكل افتراضي،__repr__ تُرجع سلسلة نصية تصف مؤشر الكائن (عنوان الذاكرة)، لذلك بدون تخصيص__str__ طباعة الكائن الخاص بك ستعرض شيئًا غامضًا بدلاً من ملخص قابل للقراءة.
في الأقسام التالية، سنستعرض طريقتين لاستخدام__str__ : الاعتماد على السلوك الافتراضي، وتحديد نسخة مخصصة.
1. التنفيذ الافتراضي
يشرح الكود التالي التنفيذ الافتراضي لـ__str__ طريقة.
يوضح الكود أعلاه مثالاً حيث لا__str__ ولا__repr__ يتم تعريفها. استدعاء__str__ يستدعي الوضع الافتراضي__repr__ الطريقة، وجميعها تعطي نفس إخراج، وهو مؤشر الكائن الخاص بنا.
2. حسب الطلب__str__ طريقة
يشرح الكود التالي كيفية تخصيص__str__ الطريقة ناجحة.
يُظهر الكود أعلاه إخراج بعد تعريفك لـ__str__ الطريقة. عندما__str__ ،print() ، أوstr() عند استدعائك، ستحصل على إخراج المحدد. لاحظ أن__repr__ يبقى إخراج كما هو.
3. ال__repr__ الطريقة المحددة فقط
لنلقِ نظرة على مثال لـ__repr__ الطريقة المحددة فقط.
في المثال الأول رأينا أنه عندما__str__ إذا لم يتم تعريفها، فسيتم استدعاؤها تلقائيًا__repr__ الطريقة. لذلك، فإن إخراج جميع الدوال -__str__ ،str() ، و__repr__ - هما متماثلان. علاوة على ذلك، فإن__repr__ لا يشترط بالضرورة أن تُرجع الدالة سلسلة نصية. في حال لم تُرجع سلسلة نصية، فإنprint() ستؤدي هذه العبارات إلى ظهور خطأ.