Python:クラスインスタンス/オブジェクトを「殺す」方法 -- python フィールド と class フィールド と oop フィールド 関連 問題

Python: how to “kill” a class instance/object?












31
vote

問題

日本語

Roachクラスがある程度の「飢餓」に達すると「死ぬ」にしたいが、インスタンスを削除する方法がわかりません。私は私の用語を間違えているかもしれませんが、私が言うことを意味することは私が窓の上に「ゴキスト」のトンを持っているということです、そして私は完全に消えるために特定のものが欲しいのです。

私はあなたにコードを見せるでしょうが、それはかなり長いです。 RoachクラスがMasterMindクラスRoach Populationリストに追加されています。

英語

I want a Roach class to "die" when it reaches a certain amount of "hunger", but I don't know how to delete the instance. I may be making a mistake with my terminology, but what I mean to say is that I have a ton of "roaches" on the window and I want specific ones to disappear entirely.

I would show you the code, but it's quite long. I have the Roach class being appended into a Mastermind classes roach population list.

</div
        

回答リスト

25
 
vote

一般的に:

  • 各バインディング変数 - gt。オブジェクトは内部オブジェクトの参照カウンタ
  • を増やす
  • 基準を減らすための通常の方法がいくつかあります(Derenceersオブジェクト - &gt;変数バインディング):

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

CPythonは現在(オプション)で参照カウント方式を使用しています ほとんどを収集する周期的にリンクされたゴミの検出を遅らせる 彼らが到達不能になるとすぐにオブジェクトがありますが、保証されていません 円形の参照を含むゴミを集める。ドキュメントを参照してください のコレクションの制御に関する情報のためのGCモジュールの開発 巡回ゴミ。他の実装は異なって行動し、CPython 5月 変化する。オブジェクトの即時のファイナライズに依存しない 到達不能になる(ex:常にファイルを閉じる)。

  • オブジェクトに対する参照数は、 sysを使用します。 getrefcount

  • 設定/チェックガベージコレクションのモジュールは gc

  • gcはオブジェクト.__ del__ オブジェクトを破棄するときの方法(追加参照)

  • 文字列のようないくつかの不変オブジェクトは特別な方法で扱われます。 2つのVARに同じ文字列が含まれている場合、それらが同じオブジェクトを参照することが可能ですが、いくつかチェックオブジェクトの識別、ID(...)から戻り値が変更されるのはなぜですか?

  • オブジェクトのIDは、関数を組み込んだ関数を使って見つけることができます ID

  • module memory_profiler は面白く見えます - メモリ使用量を監視するためのモジュールPythonプログラム

  • トピックには便利なリソースがたくさんあります。 Python

  • のオブジェクトへのすべての参照を見つける
 

In general:

  • Each binding variable -> object increases internal object's reference counter
  • there are several usual ways to decrease reference (dereference object -> variable binding):

    1. exiting block of code where variable was declared (used for the first time)
    2. destructing object will release references of all attributes/method variable -> object references
    3. calling del variable will also delete reference in the current context
  • after all references to one object are removed (counter==0) it becomes good candidate for garbage collection, but it is not guaranteed that it will be processed (reference here):

CPython currently uses a reference-counting scheme with (optional) delayed detection of cyclically linked garbage, which collects most objects as soon as they become unreachable, but is not guaranteed to collect garbage containing circular references. See the documentation of the gc module for information on controlling the collection of cyclic garbage. Other implementations act differently and CPython may change. Do not depend on immediate finalization of objects when they become unreachable (ex: always close files).

  • how many references on the object exists, use sys.getrefcount

  • module for configure/check garbage collection is gc

  • GC will call object.__ del__ method when destroying object (additional reference here)

  • some immutable objects like strings are handled in a special way - e.g. if two vars contain same string, it is possible that they reference the same object, but some not - check identifying objects, why does the returned value from id(...) change?

  • id of object can be found out with builtin function id

  • module memory_profiler looks interesting - A module for monitoring memory usage of a python program

  • there is lot of useful resources for the topic, one example: Find all references to an object in python

</div
 
 
12
 
vote

Pythonオブジェクトを削除することはできません。何も参照されていない場合(またはサイクル内のみがサイクル内の項目である場合にのみ参照されている場合)削除されます。あなたはあなたの「mastermind」をその参照を消去するように指示する必要があります。

<事前> <コード> del somemastermind.roaches[n]
 

You cannot force a Python object to be deleted; it will be deleted when nothing references it (or when it's in a cycle only referred to be the items in the cycle). You will have to tell your "Mastermind" to erase its reference.

del somemastermind.roaches[n] 
</div
 
 
1
 
vote
<事前> <コード> for i,roach in enumerate(roachpopulation_list) if roach.hunger == 100 del roachpopulation_list[i] break

母集団リストからそれを削除してインスタンスを削除します(すべてのROACHインスタンスを含みます。

あなたのRaachesがpygameで作成されたスプライトの場合、.killの単純なコマンドはインスタンスを削除します。

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

Remove the instance by deleting it from your population list (containing all the roach instances.

If your Roaches are Sprites created in Pygame, then a simple command of .kill would remove the instance.

</div
 
 
   
   

関連する質問

55  Djangoのクラスビュー  ( Class views in django ) 
Django ビューを表示するために、少しだけを変更したい場合に問題が発生する可能性があります。機能性はい、私は関数内のステートメント内のステートメントの場合は、millionのキーワード引数を持つことができますが、私はオブジェクト指向アプローチを考えてい...

682  既存のオブジェクトインスタンスへのメソッドを追加する  ( Adding a method to an existing object instance ) 
Pythonで既存のオブジェクトにメソッドを追加することが可能であることを読みました。 私はそれがそうするのが常に良いわけではないことを理解しています。しかし、どれほどどんなにこれを行うかもしれませんか? ...

13  C ++での連続した割り当て解除/割り当てを回避する方法  ( How to avoid successive deallocations allocations in c ) 
次のコードを考慮してください。 <事前> <コード> class A { B* b; // an A object owns a B object A() : b(NULL) { } // we don't know what b will ...

56  この場合、ネストされたクラスを使うべきですか?  ( Should i use nested classes in this case ) 
ビデオの再生や録音に使用されるクラスの集まりに取り組んでいます。パブリックインターフェイスのように機能するメインクラスは、 play() 、<コード> pause() 、<コード>、<コード>、<コード>、<コード>、<コード> ETC ...それから私はビデ...

2  論理対物理設計  ( Logical versus physical design ) 
私は非常に一般的なデザインの質問をしていますが、私はそれを例と具体的にフレームにします。 デジタルプリンタ用の組み込みソフトウェアに取り組んでいるとします。マシンには4つのプリントヘッドがあります(C、M、Y、K色のそれぞれの場合)。各プリントヘッドは同じタス...

21  不変クラスは最終的な必要がありますか?  ( Immutable class should be final ) 
この記事その記事 クラスの最終的なものを作ることは不変であるので、そうすることは良い理由です。 私はこれによって少し困惑しています...私は不変性が糸の安全性と単純さのPOVからの良いことであることを理解していますが、これらの懸念は伸び性に多少直交しているよ...

30  オブジェクト指向ベイジアンスパムフィルタリング?  ( Object oriented bayesian spam filtering ) 
スパムとテキストの分類のためのベイジアンフィルタリングの良くてきれいなオブジェクト指向のプログラミング(OOP)実装があるかどうか疑問に思いましたか?これは学習目的のためのものです。 ...

53  参照または値で渡しますか? [閉まっている]  ( Pass by reference or pass by value ) 
現在立つにつれて、この質問は私たちのQ&AMPにとって良いフィットではありません。フォーマット。私たちは事実、参考文献、または専門知識によって支持されることを期待していますが、この質問は...

0  任意の命名規則(ビジネスオブジェクト)  ( Arbitrary naming convention business objects ) 
OK、 [self setNeedsDisplay]1 または<コード> [self setNeedsDisplay]2 <コード> [self setNeedsDisplay]3 または<コード> [self setNeedsDisplay]4 あな...

98  オブジェクトメソッド内からオブジェクトプロパティにどのようにアクセスしますか? [閉まっている]  ( How would you access object properties from within an object method ) 
現在立つにつれて、この質問は私たちのQ&AMPにとって良いフィットではありません。フォーマット。私たちは事実、参考文献、または専門知識によって支持されることを期待していますが、この質問は...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有