お題3:シングルトン (Python Workshop the Edge 2007)
まぁ、シングルトンってなに?っていうところから始めなければならないのよね。お題3:シングルトン
Pythonでシングルトンを作れ。
Singleton パターン - Wikipedia
Singletonコンストラクタが一つしか無いことを保証するらしい。 で、作ってみた。
#!/usr/bin/env python2.5
# -*- coding: utf-8 -*-
class Singleton:
__instance = None;
def getInstance(self):
if (self.__class__.__instance == None):
self.__class__.__instance = self;
return self.__class__.__instance;
else:
return self.__class__.__instance;
class Memo(Singleton):
__text = "";
def setText(self, text):
self.__class__.__text = text;
def getText(self):
return self.__class__.__text;
class Memo2(Singleton):
__text = "";
def setText(self, text):
self.__class__.__text = text;
def getText(self):
return self.__class__.__text;
if (__name__ == "__main__"):
#以下、ひたすら動作確認
mem1 = Memo().getInstance();
mem2 = Memo().getInstance();
mem3 = Memo();
print mem1;
print mem2;
print mem3;
mem1.setText("momonga");
print mem1.getText();
print mem2.getText();
print mem3.getText();
mem3.setText("musasabi");
print mem1.getText();
print mem2.getText();
print mem3.getText();
mem2.setText("hattori");
print mem1.getText();
print mem2.getText();
print mem3.getText();
tex1 = Memo2().getInstance();
tex2 = Memo2().getInstance();
tex3 = Memo2().getInstance();
print tex1;
print tex2;
print tex3;
tex1.setText("text2");
print tex1.getText();
print tex2.getText();
print tex3.getText();
print mem1.getText();
print mem2.getText();
print mem3.getText();
…新しいインスタンスの作成自体は防げていない…という出来損ない?# -*- coding: utf-8 -*-
class Singleton:
__instance = None;
def getInstance(self):
if (self.__class__.__instance == None):
self.__class__.__instance = self;
return self.__class__.__instance;
else:
return self.__class__.__instance;
class Memo(Singleton):
__text = "";
def setText(self, text):
self.__class__.__text = text;
def getText(self):
return self.__class__.__text;
class Memo2(Singleton):
__text = "";
def setText(self, text):
self.__class__.__text = text;
def getText(self):
return self.__class__.__text;
if (__name__ == "__main__"):
#以下、ひたすら動作確認
mem1 = Memo().getInstance();
mem2 = Memo().getInstance();
mem3 = Memo();
print mem1;
print mem2;
print mem3;
mem1.setText("momonga");
print mem1.getText();
print mem2.getText();
print mem3.getText();
mem3.setText("musasabi");
print mem1.getText();
print mem2.getText();
print mem3.getText();
mem2.setText("hattori");
print mem1.getText();
print mem2.getText();
print mem3.getText();
tex1 = Memo2().getInstance();
tex2 = Memo2().getInstance();
tex3 = Memo2().getInstance();
print tex1;
print tex2;
print tex3;
tex1.setText("text2");
print tex1.getText();
print tex2.getText();
print tex3.getText();
print mem1.getText();
print mem2.getText();
print mem3.getText();
pythonではデータ、メソッドの隠蔽が出来ないらしいのでお手上げ。
newClass = NewClass().getInstance();でインスタンスを取得。
最初に作成されたインスタンスをクラス変数として保存し、すべてのメソッドはそこからテータを取ってくる。
結局これで良いのかどうかもよくわからない。
0 件のコメント:
コメントを投稿