logo

المدمرات في بيثون

يقوم المستخدمون باستدعاء Destructor لتدمير الكائن. في Python، قد لا يحتاج المطورون إلى أدوات التدمير بقدر ما هو مطلوب في لغة C++. وذلك لأن Python لديها أداة تجميع البيانات المهملة التي تتمثل وظيفتها في التعامل مع إدارة الذاكرة تلقائيًا.

سنناقش في هذه المقالة كيفية عمل أدوات التدمير في بايثون ومتى يمكن للمستخدمين استخدامها.

ال __التابع__() يتم استخدام الوظيفة كوظيفة المدمرة في بايثون . يمكن للمستخدم الاتصال ب __التابع__() تعمل عندما يتم حذف جميع مراجع الكائن، ويصبح مجمعًا للقمامة.

بناء الجملة:

 def __del__(self): # the body of destructor will be written here. 

يجب على المستخدمين أيضًا ملاحظة أن المرجع إلى الكائنات يتم حذفه أيضًا عندما يخرج الكائن عن المرجع أو عندما ينتهي الكود.

في المثال التالي، سوف نستخدم الدالة __del__() والكلمة الأساسية del لحذف كافة مراجع الكائن بحيث يتم تضمين المدمر تلقائيًا.

على سبيل المثال:

 # we will illustrate destructor function in Python program # we will create Class named Animals class Animals: # we will initialize the class def __init__(self): print('The class called Animals is CREATED.') # now, we will Call the destructor def __del__(self): print('The destructor is called for deleting the Animals.') object = Animals() del object 

انتاج:

 The class called Animals is CREATED. The destructor is called for deleting the Animals. 

توضيح -

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

تحويل سلسلة إلى عدد صحيح

يمكننا أيضًا أن نلاحظ أنه يتم استدعاء المدمر بعد انتهاء البرنامج.

مثال:

 # We will create Class named Animals class Animals: # Initialize the class def __init__(self): print('The class called Animals is CREATED.') # now, we will Call the destructor def __del__(self): print('The destructor is called for deleting the Animals.') def Create_object(): print('we are creating the object') object = Animals() print('we are ending the function here') return object print('we are calling the Create_object() function now') object = Create_object() print('The Program is ending here') 

انتاج:

 we are calling the Create_object() function now we are creating the object The class called Animals is CREATED. we are ending the function here The Program is ending here The destructor is called for deleting the Animals. 

الآن في المثال التالي، سنرى أنه عندما يتم استدعاء الدالة()، فإنها ستنشئ مثيلًا للفئة Zebra، والتي تمرر نفسها إلى الفئة Lion، والتي ستقوم بعد ذلك بتعيين المرجع إلى الفئة Zebra، وسينتج عن ذلك المرجع الدائري.

مثال:

 class Animals: # we will initialize the class def __init__(self): print(' The class called Animals is CREATED.') class Lion: def __init__(self, zebraa): self.zebra = zebraa class Zebra: def __init__(self): self.lion = Lion(self) def __del__(self): print('Zebra is dead') def function(): zebra = Zebra() function() 

انتاج:

 Zebra is dead 

بشكل عام، سيقوم مُجمع البيانات المهملة في Python، والذي يُستخدم للكشف عن هذه الأنواع من المراجع الدورية، بإزالة المرجع أيضًا. ولكن، في المثال أعلاه، يتم استخدام أداة التدمير المخصصة لوضع علامة على هذا العنصر على أنه غير قابل للتحصيل.

بلغة بسيطة، هذا يعني أن جامع البيانات المهملة لا يعرف الترتيب الذي يجب أن يتم به تدمير الكائن، لذلك يتركه. لذلك، إذا كانت مثيلات المستخدمين متضمنة في هذا المرجع الدائري، فستظل مخزنة في الذاكرة طوال فترة تشغيل التطبيق.

خاتمة

في هذه المقالة، شرحنا وظيفة Destructors في Python وكيف يمكن للمستخدمين استخدامها لحذف الكائنات التي تمت إزالة مراجعها بالفعل من الذاكرة.