web-dev-qa-db-fra.com

Comment supprimer un objet Python instancié?

Je suis relativement nouveau dans la programmation orientée objet et je n'arrive pas à comprendre comment supprimer un objet instancié en python. Toute aide serait très appréciée.

        if self.hit_Paddle(pos) == True or self.hit_Paddle2(pos) == True:
            bar = bar + 1
        if bar == 1:
            global barbox1
            barbox1 = barfill(canvas)
            barbox1.canvas.move(barbox1.id, 253, 367)
        if bar == 2:
            global barbox2
            barbox2 = barfill(canvas)
            barbox2.canvas.move(barbox2.id, 293, 367)
        if bar == 3:
            global barbox3
            barbox3 = barfill(canvas)
            barbox3.canvas.move(barbox3.id, 333, 367)
        if bar == 4:
            global barbox4
            barbox4 = barfill(canvas)
            barbox4.canvas.move(barbox4.id, 373, 367)
        if bar == 5:
            global barbox5
            barbox5 = barfill(canvas)
            barbox5.canvas.move(barbox5.id, 413, 367)
            bar = 0
            time.sleep(0.2)
            barbox1 = None
            barbox2 = None
            barbox3 = None
            barbox4 = None
            barbox5 = None

C'est le code, la principale chose que j'essayais pour supprimer les objets était barbox1 = None, mais cela ne semble pas fonctionner.

22
user2992997

object.__del__(self) est appelée lorsque l'instance est sur le point d'être détruite.

>>> class Test:
...     def __del__(self):
...         print "deleted"
... 
>>> test = Test()
>>> del test
deleted

L'objet n'est pas supprimé sauf si toutes ses références sont supprimées (comme cité par ethan)

Aussi, From Python référence officielle du document:

del x n'appelle pas directement x .del () - le premier décrémente le compte de référence pour x par un, et le dernier n'est appelé que lorsque le compte de référence de x atteint zéro

36
gitesh.tyagi

Qu'entendez-vous par delete? En Python, la suppression d'une référence (ou d'un nom) peut être effectuée avec le mot clé del, mais s'il existe d'autres noms pour le même objet, cet objet ne sera pas supprimé.

--> test = 3
--> print(test)
3
--> del test
--> print(test)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'test' is not defined

par rapport à:

--> test = 5
--> other is test  # check that both name refer to the exact same object
True
--> del test       # gets rid of test, but the object is still referenced by other
--> print(other)
5
11
Ethan Furman