Почему перестаёт работать Синглтон?
Почему при добавлении условия у меня перестаёт работать синглтон?:
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__ всегда должен возвращать тот же самый экземпляр, что и в первый раз.
У вас же во все разы кроме первого экземпляр класса не возвращается, а вместо него возвращается строка.