تقنية

__iter__=None في بايثون: هل يعود iter إلى __getitem__؟

Disabled: __iter__=None; __getitem__ available; iter: TypeError.
التعطيل يرفض البديل.

إسناد __iter__=None في الفئة يمنع iter من الرجوع إلى __getitem__؛ العملية غير متاحة. [1] [2]

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

لا؛ التعطيل الصريح يمنع البديل. [1] [2]

  • إسناد __iter__=None في الفئة يمنع iter من الرجوع إلى __getitem__؛ العملية غير متاحة. [1] [2]
  • على CPython 3.12.14، Disabled تعرف __iter__=None و__getitem__؛ الأخيرة تعيد "bud" للفهرس 0 وترفع IndexError بعده. [1] [2]
  • iter(Disabled()) ترفع TypeError؛ calls تبقى []، دون استدعاء الفهرسة. [1] [2]
  • تحكم: GetOnly تعرف __getitem__ بالشروط نفسها، دون __iter__؛ list(iter(GetOnly())) تعطي ["bud"]. [1] [2]
  • control_calls تسجل [0,1]؛ طلبت التجربة الفهرسين. نختبر فئتين مؤلفتين وإسناد None في الفئة. [1] [2]

التعطيل والبديل

إسناد __iter__=None في الفئة يمنع iter من الرجوع إلى __getitem__؛ العملية غير متاحة. [1] [2]

فهرسة موجودة

على CPython 3.12.14، Disabled تعرف __iter__=None و__getitem__؛ الأخيرة تعيد "bud" للفهرس 0 وترفع IndexError بعده. [1] [2]

رفض التكرار

iter(Disabled()) ترفع TypeError؛ calls تبقى []، دون استدعاء الفهرسة. [1] [2]

calls=[] class Disabled: __iter__=None def __getitem__(self,index): calls.append(index) if index==0:return "bud" raise IndexError try:iter(Disabled()) except TypeError:print("TypeError",calls) [1] [2]

GetOnly: no __iter__; __getitem__ available; list(iter): ["bud"].
الغياب يسمح به هنا.

غياب الطريقة والتحكم

تحكم: GetOnly تعرف __getitem__ بالشروط نفسها، دون __iter__؛ list(iter(GetOnly())) تعطي ["bud"]. [1] [2]

control_calls=[] class GetOnly: def __getitem__(self,index): control_calls.append(index) if index==0:return "bud" raise IndexError print(list(iter(GetOnly())),control_calls) [1] [2]

control_calls تسجل [0,1]؛ طلبت التجربة الفهرسين. نختبر فئتين مؤلفتين وإسناد None في الفئة. [1] [2]

المراجع

  1. Python iteration disabling
  2. CPython 3.12.14 iteration

للتوسع: لغات البرمجة.

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