Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Context Manager avec __enter__/__exit__
Un context manager, c'est un objet qui sait se preparer et se nettoyer tout seul. Quand tu ecris with open('fichier.txt') as f, le fichier s'ouvre au debut du bloc et se ferme a la fin, meme si une erreur se produit entre les deux.
Pour créer ton propre context manager, tu dois definir deux méthodes speciales :
__enter__(self) : appelee au debut du bloc with. Elle prepare les choses et retourne l'objet qu'on recoit avec as.
__exit__(self, exc_type, exc_val, exc_tb) : appelee a la fin du bloc with, meme si une erreur se produit. Elle fait le nettoyage.
Si __exit__ retourne None ou False, les exceptions se propagent normalement. Si elle retourne True, l'exception est avalee (rarement souhaitable).
Crée une classe Chronometre qui s'utilise comme context manager. __enter__ enregistre le moment de debut avec time.time() dans self.debut et retourne self. __exit__ calcule la duree ecoulee dans self.duree.
Exemple : with Chronometre() as c: pass print(c.duree) # un float >= 0
Tests (2/4)
Attribut duree existe
import time
c = Chronometre()
with c:
pass
assert hasattr(c, 'duree')
Duree >= 0
import time
with Chronometre() as c:
pass
assert c.duree >= 0