# 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


syntax highlighted by Code2HTML, v. 0.9.1