تقنية

operator.index في بايثون: نجاح int لا يكفي

فئة Num: إنت ينجح وإندكس يرفض
الفئة الأولى تعرف __int__ فقط. [1] [2]

اختبر العملية المطلوبة نفسها. [1] [2]

الخلاصة السريعة

نجاح int() لا يكفي لقبول operator.index()؛ في المثال يحتاج الأخير إلى __index__. [1] [2]

  • الفئة Num تعرف __int__ فقط؛ int(Num()) يعطي 4. [1] [2]
  • index(Num()) يرفع TypeError، ولا يستعمل __int__ بديلًا هنا. [1] [2]
  • الفئة Exact تعرف __index__؛ index(Exact()) يعطي 9. [1] [2]
  • افصل التحويل العددي عن بروتوكول العدد الصحيح. [1] [2]
  • اختبرنا 3.12.14 وفئتين عاديتين؛ لا نعمم على وراثة int أو عوائد مخالفة. [1] [2]

المثال

from operator import index
class Num:
    def __int__(self):
        return 4
class Exact:
    def __index__(self):
        return 9
print(int(Num()))
try:
    print(index(Num()))
except TypeError:
    print('TypeError')
print(index(Exact()))

[1] [2]

المخرجات: 4، ثم TypeError، ثم 9. [1] [2]

ما الذي نجح؟

نجح طلب التحويل الأول؛ لا يثبت وجود بروتوكول آخر في الفئة. [1] [2]

الفئة الثانية

في الفئة الثانية تعيد الطريقة عددًا صحيحًا، فينجح index بالناتج المعلن. [1] [2]

الطريقة المعرفة في كل فئة ونتيجة إندكس
الطريقة الثانية تعيد 9 الصحيح. [1] [2]

المراجعة

المقارنة تخص هاتين الفئتين؛ افحص العقد قبل استبدال إحدى العمليتين بالأخرى. [1] [2]

المراجع

  1. Python: operator.index
  2. Python: بروتوكولا التحويل
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.