Kelas Python saya mentakrifkan kaedah __del__, tetapi ia tidak dipanggil apabila saya memadamkan objek

WBOY
Lepaskan: 2023-09-24 23:21:05
ke hadapan
1266 orang telah melayarinya

Kelas Python saya mentakrifkan kaedah __del__, tetapi ia tidak dipanggil apabila saya memadamkan objek

__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__().

Contoh

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;
Salin selepas log masuk

Output

We are creating an object.
We are deleting an object.
Salin selepas log masuk

Sebab

Walau bagaimanapun, jika kelas mentakrifkan __del__ tetapi ia tidak dipanggil semasa memadam objek, mungkin terdapat banyak sebab -

    Pernyataan
  • del tidak semestinya memanggil __del__() - ia hanya mengurangkan kiraan rujukan objek dan memanggil __del__() jika ia mencapai sifar.

  • Kaedah
  • __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.

Selesaikan masalah

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!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan