2016-07-14 4 views
0

シングルトンを作成するためのこのアプローチが正しいかどうかは疑問でした。シングルトンを作成するには?

my_class.py

class MyClass(object): 
    def a_method(self): 
     print("Hello World") 
    ... 

MY_CLASS_SINGLETON = MyClass() 

別のモジュール:

from my_class import MY_CLASS_SINGLETON 

if __name__ == "__main__": 
    MY_CLASS_SINGLETON.a_method() 

だから、このコードは私のために働いているが、それは他で使用される前に、ガベージコレクタがMY_CLASS_SINGLETONインスタンスを破壊することができれば、私の不思議があります最終的にはmy_class.pyモジュール内の一時変数にすぎません。

+3

「一時変数」ではありません。あなたのモジュールで定義されている名前です。 Pythonはまた、あなたのモジュール内の名前付きオブジェクトでも、MyClassをガベージコレクションするつもりはありません。 – deceze

+0

[OK]を、私は範囲について知りませんでした。そして「シングルトン」については、もっと多くのインスタンスを作成することは可能ですが、私の場合はこれについて心配しません。しかし、明確化のためにありがとう:) 編集:この回答の一部はあなたのためではありませんでしたが、@AnnetteC、confucionのために申し訳ありません。 –

+0

可能な複製[Pythonでシングルトンを定義する簡単で洗練された方法はありますか?](http://stackoverflow.com/questions/31875/is-there-a-simple-elegant-way-to-define-singletons- in-python) – pat

答えて

0

MyClassの新しいインスタンスを簡単に作成できる限り、実装はシングルトンではないと思います。シングルトンは、このインスタンスを単独で保持し、このインスタンスを返すことでこれを回避する必要があります。インスタンスはクラス外に保持されています。 (しかし私は自分自身でPythonを初めて学びましたが、手続き的に書かれたPythonコードをそのまま維持しています)

しかし、あなたは一見はhereでしたか?

+0

リンクありがとうございました。私はすでにそれを見ていましたが、私が心に留めていたもの(と私のニーズのために)と比べて、「複雑すぎる」ことがわかりました。 複数のインスタンスを作成できることについては、私の場合は問題ありません。 ありがとうございます。 –

+0

しかし、あなたがしていることは、シングルトンパターンを実装していないことです。あなたは定数を提供するだけです。おそらくそれはあなたのユースケースでは大丈夫ですが、他の人があなたのコードに依存していて、それがシングルトンであると信じているなら、問題を引き起こす可能性があります。シングルトンパターンのアイデアを見てください。 – AnnetteC

+0

あなたは正しいです、私はちょうど間違った名前 'シングルトン'を使用しました。シングルトンのパターンから欲しかったのは、どこからでも同じインスタンスにアクセスできることだけです。 –

関連する問題