私は、サーバーとのソケット通信を含むPythonアプリケーションを作成しています。私はアプリケーション全体(いくつかの他のモジュール)で使用できるモジュールを用意したいと思います。現在、私のモジュールは、次のようになります。私は他のモジュールでこれを使用すると、私は次の操作を行いPythonでのクラスの単一インスタンス
class SocketCommunication:
def __init__(self):
self.socketIO = SocketIO(settings.ADDRESS, settings.PORT, Namespace)
def emit(self, message, data):
json_data = json.dumps(data.__dict__)
self.socketIO.emit(message, json_data)
class Namespace(BaseNamespace):
def on_connect(self):
print '[Connected]'
def on_disconnect(self):
print "[Disconnected]"
:
import SocketCommunication
self.sc = SocketCommunication()
問題を、私はこれを行うたびに、新しい接続が作成されていることれますサーバー上に新しいクライアントとして表示されることがあります。これは望ましくありません。 私が読むことができるので、シングルトンはPythonでは避けなければならないので、このタイプの問題のベストプラクティスは何か不思議です。
** _ボルグデザインパターン_ ** [ここをクリック](http://code.activestate.com/recipes/577870-singleton-we-dont-need-no-stinkin-singleton-the-bo/ )と[here](http://code.activestate.com/recipes/66531/)を参照して、クラスをシングルトンに簡単に変換する方法を説明します。同様に、他の方法もあります。 – martineau
私はシングルトンとしてクラス自体を使用したいと思います。私はこのアプローチに問題はなかった。 – Alfe
'SocketCommunication'があなたのクラスの名前であるため、あなたが他のモジュールで言う' import SocketCommunication'は動作しません。次の行を有効にするには 'from my_module import SocketCommunication'のようなものでなければなりません。つまり、クラスが定義された後、 'my_module.py'ファイルに' SocketCommunication = SocketCommunication() 'を追加することで、クラスを効果的にシングルトンにすることができます。そうすれば、クラス名がそれ自身のインスタンスで上書きされるので、それ以上のインスタンスを作成することは非常に困難です。 – martineau