web-dev-qa-db-ja.com

インスタンス化されたオブジェクトPythonを削除する方法?

私はオブジェクト指向プログラミングに比較的新しいので、Pythonでインスタンス化されたオブジェクトを削除する方法を理解できません。どんな助けでも大歓迎です。

        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

これがコードです。オブジェクトを削除するために私が試みた主なことはbarbox1 = Noneでしたが、それはうまくいかないようです。

22
user2992997

object.__del__(self)は、インスタンスが破棄される直前に呼び出されます。

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

すべての参照が削除されない限り、オブジェクトは削除されません(イーサンによる引用)

また、From Python公式ドキュメントリファレンス:

del xはxを直接呼び出しません。del()—前者はxの参照カウントを1つ減らし、後者はxの参照カウントがゼロに達する

36
gitesh.tyagi

deleteとはどういう意味ですか? Pythonでは、delキーワードを使用して参照(または名前)を削除できますが、同じオブジェクトに他の名前がある場合、そのオブジェクトは削除されません。

--> 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

に比べ:

--> 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