I was looking for a smooth way to create singletons in python. Here is a metaclass solution that seems to work:
class Singleton(type):
def __init__(cls, name, bases, dic):
super(Singleton,cls).__init__(name,bases,dic)
cls.instance = None
def __call__(cls, *args, **kw):
if cls.instance is None:
cls.instance = super(Singleton,cls).__call__(*args, **kw)
return cls.instance
This was originally posted by Michele Simionato as a comment on a python singleton recipe on http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/102187
You use it like this:
class A( object ):
__metaclass__ = Singleton
# here goes the rest of you class definiton ..
But you knew that anyway, didn’t you? ;)
Leave a comment