2007/06/14

課題3:シングルトン パート2

リベンジ?
いや、違うけれど…。
#!/usr/bin/env python2.5
# -*- coding: utf-8 -*-

## InstantiatedError
#シングルトン用の例外?
class InstantiatedError(Exception):
   def __init__(self,klass):
      self.message = str(klass) + ' このクラスのインスタンスは一つしか作れません。';

   def __str__(self):
      return repr(self.message);   

class Singleton:
   __instance = None;
   def __init__(self):
      if (self.__class__.__instance != None):
         #インスタンスがあれば例外をはく
         raise InstantiatedError(self.__class__);
      else:#インスタンスが無いなら今作ったものを__instanceに入れる
          self.__class__.__instance = self;

   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;#※

#※ 必ずクラス変数を参照するようにする。

if (__name__ == "__main__"):
   #以下、ひたすら動作確認
   mem1 = Memo();
   try:
      mem2 = Memo();
   except InstantiatedError:
      print "インスタンスが既にありますよ。";
同じインスタンスを作ったら例外をはくようにしてみた。
…なんかこうよくわからない。

0 件のコメント: