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

วิธี destructor __del__() ทำงานใน Python อย่างไร


เมธอด __del__() เรียกอีกอย่างว่าเมธอด destructor มันถูกเรียกเมื่อวัตถุถูกรวบรวมขยะซึ่งเกิดขึ้นหลังจากการอ้างอิงถึงวัตถุทั้งหมดถูกลบไปแล้ว

ในกรณีง่ายๆ อาจเป็นทันทีหลังจากที่คุณลบตัวแปร เช่น del x หรือถ้า x เป็นตัวแปรภายใน หลังจากที่ฟังก์ชันสิ้นสุดลง โดยเฉพาะอย่างยิ่ง ยกเว้นว่ามีการอ้างอิงแบบวงกลม CPython ซึ่งเป็นการใช้งาน Python มาตรฐานจะรวบรวมขยะทันที

คุณสมบัติเดียวของการรวบรวมขยะของ Python คือจะเกิดขึ้นหลังจากลบการอ้างอิงทั้งหมด ดังนั้นสิ่งนี้อาจไม่จำเป็นต้องเกิดขึ้นทันทีหลังจากนั้นและอาจไม่เกิดขึ้นเลย

ยิ่งไปกว่านั้น ตัวแปรสามารถอยู่ได้นานด้วยเหตุผลหลายประการ เช่น ข้อยกเว้นการแพร่กระจายหรือการวิปัสสนาโมดูลสามารถเก็บจำนวนการอ้างอิงตัวแปรไว้มากกว่า 0 นอกจากนี้ ตัวแปรสามารถเป็นส่วนหนึ่งของการอ้างอิงแบบวงกลม — CPython ที่เปิดใช้งานการรวบรวมขยะส่วนใหญ่จะเป็นช่วงพักส่วนใหญ่ แต่ไม่ใช่ทั้งหมด รอบดังกล่าว และถึงแม้จะเป็นระยะๆ เท่านั้น

มีกรณีการใช้งานที่ถูกต้องสำหรับ __del__:ตัวอย่างเช่น หากวัตถุ X อ้างอิง Y และยังเก็บสำเนาของการอ้างอิง Y ไว้ในแคชส่วนกลาง (cache['X -> Y'] =Y) ก็ถือว่าสุภาพสำหรับ X __del__ เพื่อลบรายการแคชด้วย

ถ้าคุณรู้ว่าตัวทำลายล้างจัดเตรียมการล้างข้อมูลที่จำเป็น คุณอาจต้องการเรียกมันโดยตรงว่า x.__del__()