Robię rzeczy głównie w C++, gdzie metoda destruktora jest przeznaczona do zniszczenia pozyskanego zasobu. Ostatnio zacząłem od pythona (co jest naprawdę zabawne i fantastyczne) i przyjąłem, że ma GC jak java. Tak więc nie ma dużego nacisku na własność obiektu (konstrukcja i zniszczenie).Czy __del__ naprawdę jest destruktorem?
O ile wiem, metoda __init__()
ma dla mnie więcej sensu w pythonie niż w przypadku ruby, ale metoda __del__()
, czy naprawdę musimy wdrożyć tę wbudowaną funkcję w naszej klasie? Czy mojej klasie czegoś brakuje, jeśli tęsknię za __del__()
? Jedynym scenariuszem, który mogłem zobaczyć, jest przydatność, jeśli chcę coś logować podczas niszczenia obiektu. Czy jest coś innego niż to?
Nie. Prawie nigdy nie należy implementować '__del__'. –
http://stackoverflow.com/a/2433847/2681632 –
Ty * prawie nigdy * chcesz zaimplementować '__del__'. Klasy, które zapewniają niestandardowe '__del__', muszą być traktowane w specjalny sposób przez GC podczas pracy z cyklami (ponieważ' __del__' musi być wywołany dokładnie raz), a w niektórych przypadkach GC nie będzie w stanie ich zebrać [chociaż od python3.4 + zostało to znacznie poprawione]. Jest bardzo mało przypadków, w których dobrze jest go wdrożyć. – Bakuriu