Salut,

Je me pose une question qui, après qq recherches, n'a toujours pas de réponse.

J'ai le code:
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
 
class a:
    def __init__(self, name = "default"):
        self.name = name
        print "creation de " + self.name
        self.l = []
 
    def __del__(self):
        print "destruction de " + self.name
 
def fct():
    obj1 = a("test1")
    print obj1
    obj2 = a("test2")
    print obj2
    obj1.l.append(obj2)
    del obj2
    print obj1.l[0]
    return
 
fct()
j'ai la sortie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
creation de test1
<__main__.a instance at 0x00AAAF80>
creation de test2
<__main__.a instance at 0x00AAAFD0>
<__main__.a instance at 0x00AAAFD0>
fin
destruction de test1
destruction de test2
On voit que le destructeur n'est pas appele au moment ou j'appel del obj2 et je peux toujours afficher son identifiant. Pourquoi ?
Visiblement les deux objets obj1.l[0] et obj2 pointent au meme endoit et ils sont internes a la focntion alors je devrai pouvoir les supprimer non ?
et la suppression de l'un devrait empecher l'acces a l autre en toute logique ?!

Le but finale de la chose est de creer une liste d instances de a contenues dans la liste membre d'un a "conteneur" et, a l aide d'une exception, gerer un echec a la creation et immediatement la destruction de l'objet mal cree.

J'espere ne pas avoir ete trop confus.

Merci d'avance.

+++

PS: J'ai quand meme recherche dans un paquet de docs et dans des tutoriaux mais malheureusement, comme dit plus haut, rien de repond a cette question (ou alor je ne l ai pas compris)