1

初めての質問です。以前に質問されていたら申し訳ありません。検索しましたが、答えと思われるものは見つかりませんでした。

__del__ラップされたCコードでクリーンアップを実行する必要があるため、pythonのメソッドの動作を理解しようとしています。

私の理解で__del__は、オブジェクト参照で呼び出されたときdelではなく、オブジェクトの参照カウントがゼロになったときに呼び出されます。これにより、代入なしでオブジェクトをインスタンス化するとすぐに__init__thenが呼び出されると思い__del__ましたが、次のコードが示すように、そうではないようです。

class Foo():
   def __init__(self):
      print "Hello"
   def __del__(self):
      print "Goodbye"

Foo()
Hello
<__main__.Foo instance at 0x7fb943075a28>

ここで何が起こっているのか誰か説明できますか? 前もって感謝します。

4

1 に答える 1

5

Python 対話型インタープリターは、最後の結果への参照を_変数に保持します。あなたのオブジェクトはまだ生きています。

別の式を実行してクリアします。

>>> class Foo():
...    def __init__(self):
...       print "Hello"
...    def __del__(self):
...       print "Goodbye"
... 
>>> Foo()
Hello
<__main__.Foo instance at 0x100651ef0>
>>> _
<__main__.Foo instance at 0x100651ef0>
>>> 'Hello world!'
Goodbye
'Hello world!'
于 2014-10-09T09:57:02.250 に答える