J'aimerais avoir une classe à qui l'on transmet soit une chaîne de caractères, soit un fichier déjà ouvert lors de l'initialisation. Si elle reçoit une chaîne, elle ouvre le fichier.
from typing import IO
class Parser:
def __init__(self, fin: str|IO[str]) -> None:
if isinstance(fin, str):
self.fin = open(fin, 'r')
else:
if not fin.readable():
raise ValueError("Input file must be readable.")
else:
self.fin = fin
Ma question est la suivante : quelle est la manière correcte de fermer le fichier s'il est ouvert ? J'ai imaginé qu'il pouvait être fermé dans le __del__
mais après avoir lu des articles sur le sujet, il semble que l'on s'accorde à dire que l'utilisation de la méthode __del__
n'est pas une bonne idée. Existe-t-il une meilleure façon de procéder ?