تقنية

WeakMethod في بايثون: لماذا يعيد مرجع الطريقة None؟

Node.read returns bud; own alive; plain=ref(own.read); plain() is None:True; special=WeakMethod(own.read); special()():bud
طريقة مؤقتة.

بقاء المثيل لا يبقي كائن الطريقة المؤقتة حيًا في مثالنا. [1] [2]

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

المرجع العادي فقد كائن الطريقة المؤقتة هنا. [1] [2]

  • بقاء المثيل لا يبقي كائن الطريقة المؤقتة حيًا في مثالنا. [1] [2]
  • على CPython 3.12.14، Node.read تعيد bud؛ own=Node() يبقى حيًا. [1] [2]
  • plain=ref(own.read)؛ plain() تعيد None، لأننا لم نحفظ كائن الطريقة بمرجع قوي. [1] [2]
  • special=WeakMethod(own.read)؛ special() تعيد طريقة مرتبطة بـown، ونداؤها يعطي bud. التنفيذ يعيد بناء الطريقة من المثيل والدالة الأصليين. [1] [2]
  • تحكم مستقل: saved=control.read محفوظة؛ kept=ref(saved)؛ kept() تعيد saved نفسها ونداؤها يعطي bud. المثال لطريقة بايثون عادية؛ لا نحذف المثيل أو نعمم توقيت الاختفاء. [1] [2]

المثيل والطريقة

بقاء المثيل لا يبقي كائن الطريقة المؤقتة حيًا في مثالنا. [1] [2]

مثيل حي

على CPython 3.12.14، Node.read تعيد bud؛ own=Node() يبقى حيًا. [1] [2]

المرجع العادي

plain=ref(own.read)؛ plain() تعيد None، لأننا لم نحفظ كائن الطريقة بمرجع قوي. [1] [2]

from weakref import ref,WeakMethod class Node: def read(self):return "bud" own=Node();plain=ref(own.read) special=WeakMethod(own.read) print(plain() is None) [1] [2]

control alive; saved retained; saved=control.read; kept=ref(saved); kept() is saved:True; kept()():bud
طريقة محفوظة.

البناء والتحكم

special=WeakMethod(own.read)؛ special() تعيد طريقة مرتبطة بـown، ونداؤها يعطي bud. التنفيذ يعيد بناء الطريقة من المثيل والدالة الأصليين. [1] [2]

print(special()()) control=Node();saved=control.read kept=ref(saved) print(kept() is saved,kept()()) [1] [2]

تحكم مستقل: saved=control.read محفوظة؛ kept=ref(saved)؛ kept() تعيد saved نفسها ونداؤها يعطي bud. المثال لطريقة بايثون عادية؛ لا نحذف المثيل أو نعمم توقيت الاختفاء. [1] [2]

المراجع

  1. Python WeakMethod/ref
  2. CPython WeakMethod

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

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