__enter__ y __exit__ son métodos especiales en Python que permiten a un objeto actuar como un “context manager”. Los context managers son objetos que definen un contexto de ejecución y pueden utilizarse con la declaración with para establecer y liberar recursos de manera adecuada.
Cuando se utiliza la declaración with, Python llamará automáticamente a los métodos __enter__ y __exit__ del objeto. Esto es útil para garantizar que los recursos se inicialicen correctamente antes de entrar en el bloque de código dentro del with y que se liberen adecuadamente al salir del bloque.
__enter__(self): Este método se llama al entrar en el bloque with. Se utiliza para configurar y preparar los recursos o el contexto necesario antes de ejecutar el código dentro del bloque with. Si el método __enter__ devuelve algún valor, este valor se asigna a la variable después de la palabra clave as en la declaración with.
__exit__(self, exc_type, exc_value, traceback): Este método se llama al salir del bloque with, ya sea cuando se ejecutó el código dentro del bloque sin errores o cuando ocurrió una excepción. Se utiliza para realizar tareas de limpieza y liberación de recursos. Los parámetros exc_type, exc_value y traceback contienen información sobre cualquier excepción que haya ocurrido dentro del bloque with.
class miContexto:
def __init__(self,path):
self.path=path
def __enter__(self):
print("--Inicio contexto--")
self.archivo=open(self.path,"r",encoding="utf-8")
return self.archivo
def __exit__(self, exc_type, exc_val, exc_tb):
print("--Fin contexto--")
if self.archivo:
self.archivo.close()
with miContexto("a.txt") as archivo:
print(archivo.read())