Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kelas Python saya mentakrifkan kaedah __del__, tetapi ia tidak dipanggil apabila saya memadamkan objek

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

WBOY
WBOYke hadapan
2023-09-24 23:21:051218semak imbas

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;

Output

We are creating an object.
We are deleting an object.

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam