لا؛ الوكيل غير قابل للتجزئة رغم أن كائننا حي ويقبل hash. [1] [2]
الخلاصة السريعة
- لا؛ الوكيل غير قابل للتجزئة رغم أن كائننا حي ويقبل hash. [1] [2]
- في CPython 3.12.14، Node تعيد 17 من __hash__؛ own تبقى مرجعًا قويًا، وننشئ p=proxy(own). [1] [2]
- hash(own) تعطي 17، لكن hash(p) ترفع TypeError؛ لا ينتظر الرفض اختفاء الكائن. [1] [2]
- الوثائق تستثني الوكلاء من التجزئة بصرف النظر عن الكائن؛ تعريف نوع الوكيل يتعمد إغفال tp_hash. [1] [2]
- تحكم مستقل: r=ref(control)؛ hash(r) تعطي 17 وr() is control تعطي True. التحكم مرجع ضعيف، لا وكيل؛ لا نحذف الكائنات أو نختبر مفاتيح القواميس. [1] [2]
قبول التجزئة
لا؛ الوكيل غير قابل للتجزئة رغم أن كائننا حي ويقبل hash. [1] [2]
كائن حي
في CPython 3.12.14، Node تعيد 17 من __hash__؛ own تبقى مرجعًا قويًا، وننشئ p=proxy(own). [1] [2]
كائن ووكيل
hash(own) تعطي 17، لكن hash(p) ترفع TypeError؛ لا ينتظر الرفض اختفاء الكائن. [1] [2]
from weakref import proxy,ref class Node: def __hash__(self):return 17 own=Node();p=proxy(own) print(hash(own)) try:hash(p) except TypeError:print("TypeError") [1] [2]

القاعدة والتحكم
الوثائق تستثني الوكلاء من التجزئة بصرف النظر عن الكائن؛ تعريف نوع الوكيل يتعمد إغفال tp_hash. [1] [2]
control=Node();r=ref(control) print(hash(r),r() is control) [1] [2]
تحكم مستقل: r=ref(control)؛ hash(r) تعطي 17 وr() is control تعطي True. التحكم مرجع ضعيف، لا وكيل؛ لا نحذف الكائنات أو نختبر مفاتيح القواميس. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
