__bool__ تحتاج True أو False؛ __len__ بديل عند غيابها، لا عند إرجاع نوع خاطئ. [1] [2]
الخلاصة السريعة
لا؛ العدد يسبب خطأ في مثالنا. [1] [2]
- __bool__ تحتاج True أو False؛ __len__ بديل عند غيابها، لا عند إرجاع نوع خاطئ. [1] [2]
- على CPython 3.12.14، Bad تعرف الطريقتين؛ __bool__ تعيد 1، و__len__ تعيد 3. نسجل الاستدعاءات. [1] [2]
- bool(Bad()) ترفع TypeError؛ calls تصبح ["bool"]. [1] [2]
- وجود __len__ لم ينقذ النداء؛ calls لا تحمل "len". [1] [2]
- تحكم: LengthOnly تعرف __len__ فقط، وتعيد 3؛ bool(LengthOnly()) تعطي True وcontrol_calls تصبح ["len"]. نختبر الفئتين المؤلفتين. [1] [2]
النوع المطلوب
__bool__ تحتاج True أو False؛ __len__ بديل عند غيابها، لا عند إرجاع نوع خاطئ. [1] [2]
طريقة موجودة بنتيجة خاطئة
على CPython 3.12.14، Bad تعرف الطريقتين؛ __bool__ تعيد 1، و__len__ تعيد 3. نسجل الاستدعاءات. [1] [2]
الخطأ والاستدعاء
bool(Bad()) ترفع TypeError؛ calls تصبح ["bool"]. [1] [2]
calls=[] class Bad: def __bool__(self):calls.append("bool");return 1 def __len__(self):calls.append("len");return 3 try:bool(Bad()) except TypeError:print("TypeError",calls) [1] [2]

البديل عند الغياب
وجود __len__ لم ينقذ النداء؛ calls لا تحمل "len". [1] [2]
control_calls=[] class LengthOnly: def __len__(self):control_calls.append("len");return 3 print(bool(LengthOnly()),control_calls) [1] [2]
تحكم: LengthOnly تعرف __len__ فقط، وتعيد 3؛ bool(LengthOnly()) تعطي True وcontrol_calls تصبح ["len"]. نختبر الفئتين المؤلفتين. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
