Почему перестаёт работать Синглтон?

Почему при добавлении условия у меня перестаёт работать синглтон?:

class Singleton(object):
    def __new__(cls, *dt, **mp):
        if not hasattr(cls, 'pararam'):
            cls.pararam = super(Singleton, cls).__new__(cls, *dt, **mp)
    #   else:
    #       return f'You\'ve already created such instance'
        return cls.pararam

fofo = Singleton()
new_obj = Singleton()
print(id(fofo), id(new_obj))

Ответы (2 шт):

Автор решения: dIm0n

Потому что вы возвращаете строку вместо нужного объекта

class Singleton(object):
    def __new__(cls, *dt, **mp):
        if not hasattr(cls, 'pararam'):
            cls.pararam = super(Singleton, cls).__new__(cls, *dt, **mp)
        else:
            print(f'You\'ve already created such instance')
        return cls.pararam

fofo = Singleton()
new_obj = Singleton()
print(id(fofo), id(new_obj))
→ Ссылка
Автор решения: Xander

Потому что __new__ в любом случае должен возвращать экземпляр класса. Единственное отличие синглтона и обычного класса здесь только лишь в том, что у синглтона __new__ всегда должен возвращать тот же самый экземпляр, что и в первый раз.

У вас же во все разы кроме первого экземпляр класса не возвращается, а вместо него возвращается строка.

→ Ссылка