Bonjour,

Mon problème concerne une classe dérivée du type list, avec un destructeur __del__. Cette méthode __del__ n'est pas appelée alors que toutes les références vers l'instance ont été supprimées.

J'ai fait quelques tests dans l'interpréteur, et le résultat est encore plus incompréhensible.
Les commentaires ont été rajoutés après.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
>>> class Foo(list):       # dérivation du type list
...     def __init__(self):
...             print "nouvelle instance"
...     def __del__(self):
...             print "instance supprimée"
... 
>>> a = Foo()
nouvelle instance
>>> del a
instance supprimée         # jusqu'ici, tout va bien
>>> 
>>> a = Foo()
nouvelle instance
>>> a
[]
>>> del a                  # pourquoi __del__ n'est t-il pas appelé ?
>>> 
>>> a = Foo()
nouvelle instance
>>> a
instance supprimée         # a n'est pas supprimé ! pourquoi le destructeur est appelé ? comportement différent des lignes ci-dessus...
[]
>>> del a                  # toujours pas d'appel de __del__
>>> 
>>> dir()
instance supprimée         # ??!!
['Foo', '__builtins__', '__doc__', '__name__']
Si on pouvait m'expliquer la signification de tout ça...
Merci.