web-dev-qa-db-ja.com

Python:クラスインスタンス/オブジェクトを「殺す」方法は?

Roachクラスが一定量の「空腹」に達したときに「死ぬ」ようにしたいのですが、インスタンスを削除する方法がわかりません。用語を間違えているかもしれませんが、言いたいのは、ウィンドウに大量の「ゴキブリ」があり、特定のものが完全に消えることです。

コードを紹介しますが、かなり長いです。 Roachクラスは、Mastermindクラスのゴキブリ個体群リストに追加されています。

27
user2407969

一般に:

  • 各バインディング変数->オブジェクトは、内部オブジェクトの参照カウンターを増やします
  • 参照を減らすいくつかの通常の方法があります(オブジェクトの参照解除->変数バインディング):

    1. 変数が宣言されたコードのブロックを終了する(初めて使用される)
    2. オブジェクトを破棄すると、すべての属性/メソッド変数の参照が解放されます->オブジェクト参照
    3. del variableを呼び出すと、現在のコンテキストの参照も削除されます
  • 1つのオブジェクトへのすべての参照が削除された後(counter == 0)、ガベージコレクションの適切な候補になりますが、処理されることは保証されません( reference here ):

CPythonは現在、循環リンクガベージの(オプションの)遅延検出を使用した参照カウントスキームを使用します。サイクリックガベージコレクションの制御については、gcモジュールのドキュメントを参照してください。他の実装は異なる動作をし、CPythonは変わる可能性があります。オブジェクトが到達不能になったときの即時のファイナライズに依存しないでください(例:常にファイルを閉じる)。

20
Robert Lujo

Pythonオブジェクトを強制的に削除することはできません。オブジェクトが何も参照していない場合(またはサイクル内のアイテムのみを参照しているサイクル内にある場合)削除されます。あなたの「首謀者」はその参照を消去します。

del somemastermind.roaches[n]
for i,roach in enumerate(roachpopulation_list)
        if roach.hunger == 100
            del roachpopulation_list[i]
            break

母集団リストからインスタンスを削除して、インスタンスを削除します(すべてのゴキブリインスタンスが含まれます。

ゴキブリがPygameで作成されたスプライトである場合、.killの単純なコマンドでインスタンスが削除されます。

1
Beatrix Kidco