لا؛ وجود الطريقة في Choice لا يكفي، لأنها فئة فعلية هنا. [1] [2]
الخلاصة السريعة
- لا؛ وجود الطريقة في Choice لا يكفي، لأنها فئة فعلية هنا. [1] [2]
- في CPython 3.12.14، Choice تعرف __mro_entries__ لتسجل hook وتعيد (Base,)؛ نمرر (Choice,) إلى resolve_bases. [1] [2]
- تبقى Choice دون استدعاء الطريقة؛ out is bases تعطي True وcalls=[]. [1] [2]
- التنفيذ يفحص isinstance(base,type) أولًا لكل عنصر base؛ إن كانت True يتجاوزه قبل البحث عن الطريقة. [1] [2]
- تحكم: marker=Choice() ليس فئة؛ الطريقة تنفذ، والناتج (Base,) وcalls=["hook"]. نفحص حل القواعد، دون إنشاء فئة مشتقة أو ميتا مخصصة. [1] [2]
شرط النوع
لا؛ وجود الطريقة في Choice لا يكفي، لأنها فئة فعلية هنا. [1] [2]
طريقة موجودة
في CPython 3.12.14، Choice تعرف __mro_entries__ لتسجل hook وتعيد (Base,)؛ نمرر (Choice,) إلى resolve_bases. [1] [2]
تجاوز الفئة
تبقى Choice دون استدعاء الطريقة؛ out is bases تعطي True وcalls=[]. [1] [2]
from types import resolve_bases calls=[] class Base:pass class Choice: def __mro_entries__(self,bases): calls.append("hook");return (Base,) bases=(Choice,);out=resolve_bases(bases) print(out is bases,calls) [1] [2]
![resolve_bases; Choice.__mro_entries__; marker=Choice(); bases=(marker,); out==(Base,):True; calls=["hook"]](https://images.bahralolom.com/assets/local-2000-20261012/BA-1679/python-resolve-type-hook-values.png)
الشرط والتحكم
التنفيذ يفحص isinstance(base,type) أولًا لكل عنصر base؛ إن كانت True يتجاوزه قبل البحث عن الطريقة. [1] [2]
marker=Choice();bases=(marker,) out=resolve_bases(bases) print(out==(Base,),calls) [1] [2]
تحكم: marker=Choice() ليس فئة؛ الطريقة تنفذ، والناتج (Base,) وcalls=["hook"]. نفحص حل القواعد، دون إنشاء فئة مشتقة أو ميتا مخصصة. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
![resolve_bases; Choice.__mro_entries__; bases=(Choice,); isinstance(Choice,type):True; out is bases:True; calls=[]](https://images.bahralolom.com/assets/local-2000-20261012/BA-1679/python-resolve-type-hook-main.png)