الدالة weakref.ref()‎ في بايثون

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث


تنشئ هذه الدالة البانية لكائنات weakref إشارة ضعيفة إلى الكائن المعطى.

البنية العامة

weakref.ref(object[, callback])

المعاملات

object

الكائن المراد إنشاء إشارة ضعيفة إليه.

callback

في حال توفّر قيمة للمعامل callback ولم يأخذ القيمة None وكان كائن weakref المعاد حيًّا، فسيُستدعى callback عندما يوشك الكائن على أن يُنهى، وسيمرّر كائن الإشارة الضعيفة كمعامل وحيد للاستدعاء الخلفي، ولن يكون الكائن المشار إليه متاحًا بعد ذلك.

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

تُسجّل الاستثناءات التي يطلقها الاستدعاء الخلفي في خرج الأخطاء المعيارية، ولكن لا يمكن لها أن تتمدد، ويجري التعامل معها بنفس الطريقة المتبعة مع الأخطاء المنبثقة من التابع ‎__del__()‎.

القيمة المعادة

تعيد هذه الدالة البانية إشارة ضعيفة إلى الكائن المعطى، ويمكن استعادة الكائن الأصلي عن طريق استدعاء كائن الإشارة إن كان الكائن المشار إليه حيًّا. أما إن كان الكائن المشار إليه غير حيٍّ، فسيؤدّي استدعاء كائن الإشارة إلى إعادة القيمة None.

تكون الإشارات الضعيفة قابلة للتقطيع hashable إن كان الكائن المعطى قابلًا للتقطيع. وتحافظ الإشارات الضعيفة على قيمة التقطيع الخاصّة بها حتى بعد حذف الكائن المعطى. إن كان أول استدعاء للدالة hash()‎ بعد حذف الكائن المعطى، فإنّ الاستدعاء سيطلق الخطأ TypeError.

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

يعدّ هذا نوعًا قابلًا للتفريع أكثر منه دالة بانية.

الخاصية __callback__

خاصية للقراءة فقط، وتعيد الاستدعاء الخلفي المرتبط بكائن weakref. إن لم يكن هناك استدعاء خلفي فإنّ الكائن المشار إليه بواسطة weakref لن يكون حيًّا، وستأخذ هذه الخاصية القيمة None.

ملاحظة: أضيفت الخاصية __callback__ في الإصدار 3.4 من بايثون.

مصادر

صفحة Weak references في توثيق بايثون الرسمي.