__del__ ialah kaedah ajaib dalam Python. Kaedah ajaib ini membolehkan kami melaksanakan beberapa helah yang sangat kemas dalam pengaturcaraan berorientasikan objek. Mereka juga dipanggil kaedah Dunder. Kaedah ini dikenal pasti dengan dua garis bawah (__) yang digunakan sebagai awalan dan akhiran.
Dalam Python, kami mencipta objek menggunakan __new__() dan memulakannya menggunakan __init__(). Walau bagaimanapun, untuk memusnahkan objek kita mempunyai __del__().
Mari buat dan padam objek -
class Demo: def __init__(self): print("We are creating an object."); # destructor def __del__(self): print("We are deleting an object."); # Createing and deleting an object ob = Demo(); del ob;
We are creating an object. We are deleting an object.
Walau bagaimanapun, jika kelas mentakrifkan __del__ tetapi ia tidak dipanggil semasa memadam objek, mungkin terdapat banyak sebab -
del tidak semestinya memanggil __del__() - ia hanya mengurangkan kiraan rujukan objek dan memanggil __del__() jika ia mencapai sifar.
__del__() boleh dipanggil secara rawak. - Jika struktur data anda mengandungi pautan bulat, kiraan rujukan tidak akan kembali kepada sifar. Python menjalankan algoritma untuk mengesan kitaran sedemikian, tetapi pengumpul sampah mungkin berjalan beberapa lama selepas rujukan terakhir kepada struktur data hilang.
Berikut adalah pembaikan -
Jangan panggil __del__() terus - _del__() hendaklah memanggil close(), dan close() hendaklah memastikan ia boleh dipanggil berbilang kali pada objek yang sama.
Elakkan rujukan bulat - Gunakan modul weakref untuk mengelakkan rujukan bulat. Ia membolehkan anda menunjuk ke objek tanpa meningkatkan kiraan rujukannya. Modul Weakref juga boleh digunakan untuk mendapatkan contoh kelas
Atas ialah kandungan terperinci Kelas Python saya mentakrifkan kaedah __del__, tetapi ia tidak dipanggil apabila saya memadamkan objek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!