__del__bir sonlandırıcıdır . Bir nesne çöp toplandığında çağrılır ve bu, nesneye yapılan tüm referanslar silindikten sonra bir noktada gerçekleşir.
Bir de basit durumda bu demek hemen sonra olabilir del xeğer veya xfonksiyon sona erdikten sonra, yerel bir değişkendir. Özellikle, döngüsel referanslar olmadığı sürece, CPython (standart Python uygulaması) hemen çöp toplayacaktır.
Ancak, bu CPython'un bir uygulama detayıdır . Sadece gerekli Python çöp toplama özelliği bu olur ki sonra tüm referanslar silinmiş gerekli değildir bu olabilir gerçekleşmesi, böylece sonra sağ ve hiç olay değildir .
Dahası, değişkenler birçok nedenden ötürü uzun süre yaşayabilir , örneğin, yayılan bir istisna veya modül iç gözlemi değişken referans sayısını 0'dan büyük tutabilir. Ayrıca, değişken referans döngüsünün bir parçası olabilir - Çöp toplama açık CPython en çok molalar açık , ama hepsi değil, bu tür döngüleri ve o zaman bile yalnızca periyodik olarak.
Uygulanacağına dair bir garantiniz olmadığından, çalıştırmanız gereken kodu asla koymamalısınız __del__()- bunun yerine, bu kod bloğun finallymaddesine tryveya bir ifadedeki bir bağlam yöneticisine aittir with. Ancak, orada geçerli kullanım durumları için __del__: örneğin eğer bir nesne Xreferansları Yda bir kopyasını saklar ve Yküresel referans cache( cache['X -> Y'] = Yiçin) o zaman olurdu kibar X.__del__ayrıca önbellek girdisini silin.
Eğer biliyorsanız yıkıcı gerekli bir temizleme (yukarıdaki kılavuz aykırı) sağladığını, belki istersiniz doğrudan diyoruz bir yöntem olarak bu konuda özel bir şey olmadığı için,: x.__del__(). Açıkçası, bunu ancak iki kez aranmanın bir sakıncası olmadığını biliyorsanız yapmalısınız. Veya son çare olarak, bu yöntemi kullanarak yeniden tanımlayabilirsiniz.
type(x).__del__ = my_safe_cleanup_method