PythonでSingletonの実装に一言くりーむわーかープログラムとか。・試しててハマった事など。誰かのお役に立てば幸いかと。その他、いろいろエトセトラ。調べてみたんですが、見てく中でちょっと、ん?って感じた。PythonにはC#とかで言う、privateがないので、いろいろ工夫が必要。140550875600936get_modelを使ってる間は大丈夫。SingletonClass()の普通のコンストラクタに制限かけてるわけじゃないので、1つである事を保証はしてない。__new__を使ってみる。生成された後、それが呼び出し元に返される前に呼び出されます。引数はクラスのコンストラクタ式に渡したものです。渡された引数と同じになります。メソッドは呼び出されません。サブクラスでインスタンス生成をカスタマイズすることにあります。クラス生成をカスタマイズするために、カスタムのメタクラスでよくオーバーライドされます。事らしいので、__new__でオブジェクトの実態が作られてるから、__new__の中で既にインスタンスがあるかどうか見る感じ。y-valueみたいに書けるので、シングルトンを意識しないで使えて、値も共有出来て便利ー。みたいな感じ?正直、「え?それってどうなん?」って思た。?確かに、オブジェクトのIDは一致してるんだけど、上で行くと、2回目の__new__の中で__init__呼び出されてるから、self.valの値変わっちゃうよね?↓の感じ。valueんーと、これだいぶヤベー気がするのですが、こういうモンなの?あと、シングルトン意識しなくていいとか、どうなんだろ。シングルトンは意識して使って欲しいと自分は思う。シングルトンって何のために使うんだろ。グローバル変数の変わり?それは違うよね?オブジェクト指向自体、グローバル変数との闘いの果てに出来たものだと思うので、そういう使い方は違うように思う。シングルトンって、不変な何かのマスタとか設定とか、オブジェクト指向だと、どうしてもインスタンスを毎回作る感じになってしまうので、そういう不要なインスタンスを作らないでパフォーマンスとかメモリ効率を上げるためのものだと思ってます。Pythonだとやっぱりどうしてもオブジェクト内の値すらも、自由に書き換え出来ちゃうから、こういうの強制させるものは作るの無理なんかな。意識して欲しいので、とりあえずこんな感じにしてみた。NotImplementedError("コンストラクタ直呼びは禁止。SingletonFactory.get_model()を使用。cls.__instance完全に自前でコンストラクタ用意した感じ。いちを、普通に__new__と__init__で作ったオブジェクトとdir()の結果は一致してたから大丈夫だと思うんだけど、ちょっと心配。まー不変な設定とかマスタをキャッシュ的に使いたいだけなのでこれでもいいか。これだとスレッドセーフじゃないので、ロックをつける。cls.__instanceあと、起動中は不変なデータなハズなんだけど、もしかしたら、稼働中に値の更新をしたくなるかもしれないので、いちを更新用のメソッドをつけておく。NotImplementedError("コンストラクタ直呼びは禁止。SingletonFactory.get_model()を使用。cls.__instanceもちろん、Pythonのコードなので、正直、取得した後に値とかオブジェクトの内容を変更したりは余裕で出来る。意識はしてくれるんじゃないだろうかと期待。StackOverFlowだと、デコレータ使ったりして定義してるっぽいけど、どうなんでしょ。作るならこの辺りかなーとか思いました。ついでに、Djangoのソース読んでるとロックのところって下で書いてる。threading.RLock()なんで、RLock()使ってるんだろ?理由が思いつかない。知ってる人誰か教えてください。