إسناد __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"].](https://images.bahralolom.com/assets/local-2000-20261012/BA-1642/python-iter-none-values.png)
غياب الطريقة والتحكم
تحكم: 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]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
