# 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