Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Destructor __del__() ใน Python ทำงานอย่างไร

__del__() เป็น Destructor Method เรียกเมื่อออบเจ็กต์ถูก Garbage Collected ซึ่งเกิดขึ้นหลังจาก Reference ทั้งหมดไปยังออบเจ็กต์ถูกลบแล้ว

กรณีง่ายๆ อาจเกิดทันทีหลัง del x หรือจบฟังก์ชัน (ถ้า x เป็น Local Variable) โดยเฉพาะถ้าไม่มี Circular Reference CPython (Standard Implementation) จะ Garbage Collect ทันที

อย่างไรก็ตาม Garbage Collection เกิดขึ้นหลัง Reference หมดแล้ว อาจไม่เกิดทันทีหรืออาจไม่เกิดเลยก็ได้

ตัวแปรอาจอยู่นานมากหลายเหตุผล เช่น Propagating Exception หรือ Module Introspection ทำให้ Reference Count > 0 หรือเป็นส่วนของ Circular References CPython แบบ GC เปิด จะทำลาย Cycle ส่วนใหญ่ แต่ไม่ใช่ทั้งหมด และเป็นระยะๆ

Use Case ที่ถูกต้อง: หากออบเจ็กต์ X อ้างอิง Y และเก็บ Reference ของ Y ใน Global Cache (cache['X -> Y'] = Y) ควรให้ X.__del__ ลบ Cache Entry ด้วย

หากรู้ว่า Destructor ให้ Cleanup ที่จำเป็น อาจเรียกโดยตรง x.__del__()