Python で Singleton/シングルトン パターン
 2006.12.12

PythonでSingletonパターンを実現する方法.
class Singleton(type):
    def __init__(self, *args):
        type.__init__(self, *args)
        self._instance = None

    def __call__(self, *args):
        if self._instance is None :
            self._instance = type.__call__(self, *args)
        return self._instance
ここで見つけました.http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/412551 Python Cookbook のサイトを探すと幾つか見つかりますが,このコードが一番気に入ったのでこれを利用しています. RDBへのコネクションを管理するクラス等で以下のように使っています.
import singleton
import psycopg2.psycopg1 as dbapi2

import psycopg2.extras
DictCursor = psycopg2.extras.DictCursor

class DBConnectionManager :
    __metaclass__ = singleton.Singleton

    def __init__(self, dsn) :
        self.dsn = dsn
        self.con = None
        self.closed = True

    def getcon(self) :
        if self.closed :
            self.con = dbapi2.connect(self.dsn)
            self.closed = False
        return self.con

    def close(self) :
        if not self.closed :
            self.con.close()
        self.closed = True
カテゴリー:python&zope