Introducción a Destructor en Python

Constructores y Destructores son dos conceptos importantes en python. Se llama a los constructores cuando se crea el objeto de una clase. Sin embargo, los Destructores son llamados cuando el objeto de una clase es destruido. Por lo tanto, no está mal decir que los constructores son lo opuesto a los destructores. Python, al ser un lenguaje de programación orientado a objetos, Constructores y Destructores también forma parte de este lenguaje.

Los destructores no se usan tanto en Python como Java y C ++. Pero saberlo hace una base aún más fuerte en python.

Se puede demostrar que los destructores son muy útiles cuando se trata del trabajo de cordura del programa. Por ejemplo: liberar los recursos utilizados antes de salir del programa, como liberar recuerdos, cerrar archivos, etc.

La palabra clave utilizada para definir Destructor es: __del __ () palabra clave:

Sintaxis:

def __del__(self):
#destructor body

Como se puede ver, __del__ es la palabra clave utilizada para definir destructor. Cuando se llama, todas las referencias a ese objeto se eliminan, lo que también se conoce como recolección de basura.

Ejemplos de Destructor en Python

Veamos diferentes ejemplos de destructor en python, para obtener una mejor comprensión:

Ejemplo 1

class Grocery:
# Initializing
def __init__(self):
print('Grocery created.')
# Deleting (Calling destructor)
def __del__(self):
print('Destructor called, Grocery deleted.')
obj = Grocery()
del obj

Salida:

"Grocery" es la clase definida con sus métodos especiales: constructor y destructor.

Entonces, uno puede ver una vez que se crea el objeto de la clase "Grocery". Invoca automáticamente __init__, que es el constructor de la clase. Sin embargo, cuando se ejecuta "del obj" para eliminar un objeto, se llama automáticamente al método destructor.

Ejemplo # 2

class Text:
def __del__(self):
print "Text deleted"
a = Text()
del a
a = Text()
b = a
del b
del a

Salida:

El texto es una clase, "a" es una referencia de objeto a la clase. "B" copia local de esa referencia "a". Entonces, cuando se elimina b, no se llama al método, ya que simplemente contiene la copia local.

Ventajas de Destructor en Python

Como se dijo antes, el destructor no se usa tanto en Python como en Java, C ++. Sin embargo, el concepto sigue siendo el mismo. Estas son algunas ventajas de usarlo en programas:

  • Los objetos innecesarios se eliminan automáticamente. Esto libera el espacio de memoria que se conoce como recolección de basura.
  • La ventaja también radica en el hecho de que invoca automáticamente.

Ciertos pasos que deben tenerse en cuenta al usar el destructor:

1. Python no sabe el orden en que destruir objetos será más seguro y puede contener referencias circulares entre sí. Debido a esto, la gente recomienda usar "cerrar" explícitamente después de cada función. Pero en caso de que ocurran excepciones, administrar el método de cierre se vuelve problemático. Por lo tanto, usar destructores es mejor, teniendo en cuenta las referencias cíclicas.

2. Referencias cíclicas si no se maneja bien, hay posibilidades de abstracciones con fugas, además de un mal diseño.
Lo mejor es: los recursos deben ser manejados por el objeto de nivel más bajo de la clase.

3. Cuando alguien tiene una gran necesidad de utilizar referencias cíclicas a objetos en código complejo, Python le ofrece una buena solución en forma de nombre de módulo: weakref. Eso significa que se proporcionan referencias débiles al referente, lo que en última instancia ayuda a implementar la memoria caché y ya no mantiene vivo el objeto grande. Cuando un objeto grande no está vivo, eso significa que aparece en la memoria caché.

Vamos a verlo a través de un pequeño código para obtener una comprensión lúcida:

Código:

import weakref
class C:
def method(self):
print("Hi!method called!")
c = C()
r = weakref.ref(c)
print(c)
print(r)

Salida:

Como se puede ver, "r" es una referencia débil al objeto "c".

Si hacemos una referencia de método a "r" como c2 = r (). Entonces "c" y "c2" deberían ser lo mismo, porque se refiere a lo mismo. Vea el ejemplo que se muestra a continuación:

En el caso de la eliminación del objeto principal, el objeto de referencia pierde su existencia. Vea el ejemplo que se muestra a continuación:

Como se puede notar, los resultados de print (r ()) son "Ninguno". En ese caso:
gc.collect () resultará en 0.

4. __del__ no debe confundirse con del en python. __del__ es un método especial de una clase que es destructor y "del" se usa para destruir una variable definida en el entorno python. Ambas son dos cosas completamente diferentes.

Me gusta:

xx = 10
del xx

Conclusión

Después de revisar el contenido anterior, podemos decir que los constructores y destructores son una parte crucial de Python. Destructor desempeña un papel fundamental en la gestión de la memoria, donde realiza muchas tareas de limpieza en los objetos utilizados en la programación. Tratar con programas pequeños puede no darle la imagen real detrás del uso de destructores. Sin embargo, al tratar con programas de nivel de producción o cualquier línea de código compleja, la importancia de los destructores puede entenderse claramente, ya que el uso de memoria se vuelve muy importante allí. Tener en cuenta la idea de referencia cíclica puede conducir absolutamente a un buen diseño mientras se trabaja con destructores.

Artículos recomendados

Esta es una guía para Destructor en Python. Aquí discutimos la sintaxis, las ventajas junto con los diferentes ejemplos de Python destructor. También puede consultar los siguientes artículos para obtener más información:

  1. Clase abstracta en Python
  2. Editores de Python
  3. Declaración de ruptura de Python
  4. Intercambio en Python
  5. Ejemplos de intercambio en PHP
  6. Declaración de ruptura en JavaScript
  7. Guía completa de Destructor en PHP con ejemplos