# Decorador para transformar a classe em Singleton.
# Veja o uso "esperto" de __call__ para manter a sintaxe
# usual de criacao de objetos a partir de uma classe decorada.
class SingletonDecorator:
def __init__(self, klass):
self.klass = klass
self.instance = None
def __call__(self, *args, **kwds):
if not self.instance:
self.instance = self.klass(*args, **kwds)
else:
self.instance.__init__(*args, **kwds)
return self.instance