class Singleton (object):
def __new__(cls, *args, **kwds):
# Tenta pegar a instância existente:
it = cls.__dict__.get("__it__")
# Se exitir, retorne-a:
if it is not None:
return it
# Se não, crie uma instância nova:
cls.__it__ = it = object.__new__(cls)
# Inicializa a instância:
it.init(*args, **kwds)
# Retorna a nova instância:
return it
def init(self, *args, **kwds):
print("Objeto inicializado")
obj1 = Singleton()
obj1.name = "Foo Bar"
obj2 = Singleton()
print(obj2.name)
Y2xhc3MgU2luZ2xldG9uIChvYmplY3QpOgogICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2RzKToKICAgICAgICAKICAgICAgICAjIFRlbnRhIHBlZ2FyIGEgaW5zdMOibmNpYSBleGlzdGVudGU6CiAgICAgICAgaXQgPSBjbHMuX19kaWN0X18uZ2V0KCJfX2l0X18iKQogICAgICAgIAogICAgICAgICMgU2UgZXhpdGlyLCByZXRvcm5lLWE6CiAgICAgICAgaWYgaXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHJldHVybiBpdAogICAgICAgICAgICAKICAgICAgICAjIFNlIG7Do28sIGNyaWUgdW1hIGluc3TDom5jaWEgbm92YToKICAgICAgICBjbHMuX19pdF9fID0gaXQgPSBvYmplY3QuX19uZXdfXyhjbHMpCiAgICAgICAgCiAgICAgICAgIyBJbmljaWFsaXphIGEgaW5zdMOibmNpYToKICAgICAgICBpdC5pbml0KCphcmdzLCAqKmt3ZHMpCiAgICAgICAgCiAgICAgICAgIyBSZXRvcm5hIGEgbm92YSBpbnN0w6JuY2lhOgogICAgICAgIHJldHVybiBpdAogICAgICAgIAogICAgZGVmIGluaXQoc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgcHJpbnQoIk9iamV0byBpbmljaWFsaXphZG8iKQogICAgICAgIApvYmoxID0gU2luZ2xldG9uKCkKb2JqMS5uYW1lID0gIkZvbyBCYXIiCgpvYmoyID0gU2luZ2xldG9uKCkKcHJpbnQob2JqMi5uYW1lKQ==