Conditions de destruction des instances de classes
Salut,
Je me pose une question qui, après qq recherches, n'a toujours pas de réponse.
J'ai le code:
Code:
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:
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) :(