objectif
Attacher une fonction de nettoyage appelée quand l’objet est collecté.
code minimal
import weakref, gc
called = {"n":0}
class R: pass
r = R()
f = weakref.finalize(r, lambda: called.__setitem__("n", called["n"]+1))
del r
gc.collect()
print(called["n"] >= 1) # attendu: True
utilisation
import weakref
class Conn: pass
c = Conn()
fin = weakref.finalize(c, lambda: None)
print(fin.alive is True)
variante(s) utile(s)
import weakref
class A: pass
a = A()
fin = weakref.finalize(a, print, "bye")
del a
print(callable(weakref.finalize))
notes
- finalize ne garantit pas l’instant précis d’exécution (GC).
- Préférez context managers pour des ressources critiques.