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

من موسوعة حسوب
مراجعة 15:41، 27 أغسطس 2018 بواسطة Mohammed Taher (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الدالة <code>weakref.finalize()‎</code> في بايثون}}</noinclude> يعيد هذا الصنف كائن إنهاء finalzier قا...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)


يعيد هذا الصنف كائن إنهاء finalzier قابل للاستدعاء، ويجري استدعاؤه عند استرجاع الكائن المعطى بواسطة مجموعة garbage.

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

class weakref.finalize(obj, func, *args, **kwargs)

المعاملات

يعدّ كائن الإنهاء "حيًّا" إلى حين استدعائه (إما على نحو صريح أو في مجموعة garbage) وبعد ذلك يصبح "ميّتًا". تؤدي عملية استدعاء كائن إنهاء حيّ إلى إعادة نتيجة تنفيذ func(*arg, **kwarg)‎، في حين تعيد عملية استدعاء كائن إنهاء ميّت القيمة None.

من الضروري التأكّد من أن func و args و kwargs لا تمتلك أيّ إشارات إلى الكائن المعطى، سواء أكانت الإشارات مباشرة أو غير مباشرة، وإلا فإنّ الكائن المعطى لن يُجمع بواسطة مجموعة garbage. كذلك يجب أن لا تكون func على وجه الخصوص تابعًا مرتبطًا بالكائن المعطى.

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

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

عند إغلاق البرنامج، يجري استدعاء كائنات الإنهاء الحيّة كلها باستثناء تلك التي تأخذ الخاصية atexit فيها القيمة false، وتستدعى هذه الكائنات بعكس ترتيب إنشائها.

لن ينفّ كائن الإنهاء الاستدعاء الخلفي الخاصّ به أثناء الجزء الأخير من عملية إغلاق المفسّر عندما تكون الخصائص العامة globals في الوحدة عرضة لاستبدال قيمها بالقيمة None.

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

التابع __call__()

إن كان self حيًّا فسيُعلّم من قبل التابع على أنّه ميت ويعيد التابع نتيجة استدعاء func(*args, **kwargs)‎. أما إن كان self ميّتًا فسيعيد التابع القيمة None.

التابع detach()‎

إن كان self حيًّا فسيعلّم من قبل التابع على أنّه ميت ويعيد التابع الصفّ (obj, func, args, kwargs). وإن كان self ميّتًا فسيعيد التابع القيمة None

التابع peek()‎

إن كان self حيًّا فسيعيد التابع الصف (obj, func, args, kwargs). وإن كان self ميّتًا فسيعيد التابع القيمة None.

الخاصية alive

تحمل هذه الخاصية القيمة True إن كان كائن finalizer حيًّا، وتأخذ القيمة False فيما عدا ذلك.

الخاصية atexit

خاصية بوليانية قابلة للكتابة وتأخذ القيمة True كقيمة افتراضية. يستدعي البرنامج عند إغلاقه جميع كائنات finalizer الحية التي تأخذ الخاصّية atexit فيها القيمة True، وتجري عملية الاستدعاء بعكس ترتيب إنشاء هذه الكائنات. هذه الخاصية جديدة في الإصدار 3.4 من بايثون.

مصادر

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