__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 x
eğer veya x
fonksiyon 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 finally
maddesine try
veya 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 X
referansları Y
da bir kopyasını saklar ve Y
küresel referans cache
( cache['X -> Y'] = Y
iç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