2

私のデザインは次のとおりです。

  • __main__参照a
  • a参照b
  • b参照a
  • aから作成され、廃棄されます__main__

したがってab循環参照があります。しかし、私は両方を好み、処分しdel aたいと思います。ab

多くの場所で、コンテキストマネージャーを使用するためのアドバイス、具体的にはのwith代わりにステートメントを目にし__del__()ます。ただしwith、ローカルスコープでの開始と終了のすべての例(特定のメソッドなど)

これはエレガントに実行できますwithか?
代替手段は何ですか?

4

3 に答える 3

5

私は次のいずれかをお勧めします:

  • weakrefの使用-循環参照が含まれる場合に適用されることがあります
  • または...必要な順序で手動で処理します-ではなく、適切なタイミングで呼び出す__del__明示的なdisposeメソッドで処理します

__del__一般に、循環参照があることがわかっている場合、自動廃棄に依存することはお勧めできません。それはもろいです-場合によってはそれを機能させることができたとしても、依存関係の小さな変更が再びそれを壊す可能性があります。

于 2011-08-30T09:26:06.157 に答える
2

代替手段は何ですか?

何もしない。このような何百万もの循環参照を作成し、これ(そしてこれだけ)がプログラムを破壊していることを証明できるまでは、実際には問題ではありません。

于 2011-08-30T09:56:33.680 に答える
0

ガベージコレクターがこれを処理することになっています。

于 2011-08-30T09:55:31.453 に答える