Я новичок в Python и пытаюсь выучить этот язык, проверяя и создавая примеры шаблонов проектирования в Python.
У меня путаница с классической реализацией Singleton Pattern.В большинстве статей упоминается о реализации Singleton как классической
class Singleton(object):
name = None
@staticmethod
def instance():
if '_instance' not in Singleton.__dict__:
Singleton._instance = Singleton()
return Singleton._instance
s1 = Singleton().instance();
s2 = Singleton().instance();
assert s1 is s2
. Но я не до конца убежден в этой реализации, потому что нигде мы не ограничиваем пользователей в создании нескольких объектов класса Singleton, и я все еще могу создатьэкземпляр этого класса с помощью вызова Singleton ().В Java мы предотвращаем это, делая конструктор класса как Private.
Другая реализация, на которую мне указали, это
class Singleton(object):
_instances = {}
def __new__(class, *args, **kwargs):
if class not in class._instances:
instance = super().__new__(class)
class.__instances[class] = instance
return class._instances[class]
И это заставило меня задуматься.Может кто-нибудь объяснить мне, как это работает?