Implementar y Probar el Método __del__
En este paso, aprenderá sobre el método __del__. Este método se denomina finalizador o destructor. Se invoca cuando el contador de referencias de un objeto cae a cero, lo que significa que está a punto de ser destruido por el recolector de basura (garbage collector) de Python. A menudo se utiliza para tareas de limpieza, como cerrar conexiones de red o manejadores de archivos (file handles).
Puede eliminar una referencia a un objeto usando la declaración del. Cuando desaparece la última referencia, __del__ se llama automáticamente.
Agreguemos un método __del__ a nuestra clase Dog para ver cuándo se destruye un objeto.
Abra nuevamente el archivo dog_cat.py. Reemplace todo el contenido del archivo con el siguiente código. Esta versión elimina el código que crea una instancia de Dog (para evitar crearla cuando se importa el módulo) y agrega el método __del__ a la clase Dog.
## File Name: dog_cat.py
class Animal:
def __init__(self, name):
self._name = name
def say(self):
print(self._name + ' is saying something')
class Dog(Animal):
def __new__(cls, name, age):
instance = super().__new__(cls)
return instance
def __init__(self, name, age):
super().__init__(name)
self.age = age
def say(self):
print(self._name + ' is making a sound: wang wang wang...')
## Add this method to the Dog class
def __del__(self):
print(f'The Dog object {self._name} is being deleted.')
Guarde el archivo dog_cat.py.
Ahora, creemos un script separado para probar este comportamiento. Abra el archivo test_del.py desde el explorador de archivos.
Agregue el siguiente código a test_del.py. Este script creará dos instancias de Dog y luego eliminará una de ellas explícitamente.
## File Name: test_del.py
from dog_cat import Dog
import time
print("Creating two Dog objects: d1 and d2.")
d1 = Dog('Tom', 3)
d2 = Dog('John', 5)
print("\nDeleting reference to d1...")
del d1
print("Reference to d1 deleted.")
## The garbage collector may not run immediately.
## We add a small delay to give it time to run.
time.sleep(1)
print("\nScript is about to end. d2 will be deleted automatically.")
Guarde el archivo. Ahora, ejecute el script test_del.py en la terminal.
python ~/project/test_del.py
Observe la salida. El mensaje __del__ para Tom aparece después de que se llama a del d1. El mensaje para John aparece al final, ya que el objeto d2 es recolectado por el recolector de basura cuando el script finaliza.
Creating two Dog objects: d1 and d2.
Deleting reference to d1...
The Dog object Tom is being deleted.
Reference to d1 deleted.
Script is about to end. d2 will be deleted automatically.
The Dog object John is being deleted.
Nota: El momento exacto de la recolección de basura puede variar. __del__ se llama cuando el objeto es recolectado, no necesariamente inmediatamente después de que se usa del.