私はPythonでクラスを書く方法について考えてきました。具体的には、コンストラクターの実装方法とオブジェクトの破棄方法について説明します。オブジェクトのクリーンアップを行うためにCPythonの参照カウントに頼るのは嫌です。これは、基本的に、オブジェクトのライフタイムを管理するためにステートメントを使用する必要があり、明示的なclose/disposeメソッドが必要であることを示しています(このメソッドは、オブジェクトがコンテキストマネージャでもある場合__exit__
から呼び出すことができます)。__del__でオブジェクトのクローズ/破棄を行うことは本当に問題ありませんか?
class Foo(object):
def __init__(self):
pass
def close(self):
pass
、私のすべてのオブジェクトが、このように動作し、すべての私のコードは、ステートメントまたはclose()
(またはdispose()
)への明示的な呼び出しで使用する場合、私は本当に私が__del__
で任意のコードを配置する必要性が表示されません。私たちのオブジェクトを処分するのに本当に__del__
を使うべきですか?
私はオブジェクトのクリーンアップを行うためにCPythonの参照カウントに頼りたくありません。なぜ地球上ではないのですか?オブジェクト参照カウントで何が問題になっていますか? –
@ S.Lott、JythonやIronPythonなどのより高度なガベージコレクションを使用する環境にコードを移動すると、リファレンスカウントは存在しません。また、ある日CPython(Unladen Swallowなど)が蹴ったり叫んだりするとどうなるでしょうか? 21世紀に入っても?私は再利用可能な移植可能なライブラリ(使い捨て、スロー・アウェイ、スクリプト、マイナー・モジュールとは対照的に)でRCに「依存しない」というOPに同意します。 –
@ S.Lott:Alexはあなたの質問に既に答えました。参照カウントに依存したくないもう一つの理由は、JITがPyPyプロジェクトから出てくることです。その背後にいる人々は、CPythonに比べて部分的なスピードアップを実現できると楽観的に思えます。 – Arlaharen