Destructores en Python

Los constructores en Python
Destructors se llaman cuando un objeto se destruye. En Python, los destructores no se necesitan tanto como en C++ porque Python tiene un recolector de basura que maneja la administración de la memoria automáticamente. 
El método __ del __() es conocido como método destructor en Python. Se llama cuando se han eliminado todas las referencias al objeto, es decir, cuando un objeto se recolecta como basura. 
Sintaxis de la declaración del destructor: 
 

def __del__(self):
  # body of destructor

Nota: una referencia a objetos también se elimina cuando el objeto sale de la referencia o cuando finaliza el programa. 
Ejemplo 1: Aquí está el ejemplo simple de destructor. Al usar la palabra clave del, eliminamos todas las referencias del objeto ‘obj’, por lo tanto, el destructor se invoca automáticamente.
 

Python3

# Python program to illustrate destructor
class Employee:
 
    # Initializing
    def __init__(self):
        print('Employee created.')
 
    # Deleting (Calling destructor)
    def __del__(self):
        print('Destructor called, Employee deleted.')
 
obj = Employee()
del obj
Producción: 

Employee created.
Destructor called, Employee deleted.

 

Nota: se llamó al destructor después de que finalizó el programa o cuando se eliminaron todas las referencias al objeto, es decir, cuando el recuento de referencias se vuelve cero, no cuando el objeto salió del alcance.
Ejemplo 2: Este ejemplo da la explicación de la nota mencionada anteriormente. Aquí, observe que se llama al destructor después de que se imprima ‘Program End…’.
 

Python3

# Python program to illustrate destructor
 
class Employee:
 
    # Initializing
    def __init__(self):
        print('Employee created')
 
    # Calling destructor
    def __del__(self):
        print("Destructor called")
 
def Create_obj():
    print('Making Object...')
    obj = Employee()
    print('function end...')
    return obj
 
print('Calling Create_obj() function...')
obj = Create_obj()
print('Program End...')
Producción: 

Calling Create_obj() function...
Making Object...
Employee created
function end...
Program End...
Destructor called

 

Ejemplo 3: Ahora, considere el siguiente ejemplo: 
 

Python3

# Python program to illustrate destructor
 
class A:
    def __init__(self, bb):
        self.b = bb
 
class B:
    def __init__(self):
        self.a = A(self)
    def __del__(self):
        print("die")
 
def fun():
    b = B()
 
fun()
Producción: 

die

 

En este ejemplo, cuando se llama a la función fun(), crea una instancia de la clase B que pasa a la clase A, que luego establece una referencia a la clase B y da como resultado una referencia circular .
Generalmente, el recolector de elementos no utilizados de Python, que se utiliza para detectar este tipo de referencias cíclicas, lo eliminaría, pero en este ejemplo, el uso de un destructor personalizado marca este elemento como «no recopilable». 
Simplemente, no sabe el orden en que destruir los objetos, así que los deja. Por lo tanto, si sus instancias están involucradas en referencias circulares, vivirán en la memoria mientras se ejecute la aplicación.
 

Publicación traducida automáticamente

Artículo escrito por vivekkothari y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *