Шаблон Singleton в PythonPython

Программы на Python
Ответить
Anonymous
 Шаблон Singleton в Python

Сообщение Anonymous »

Я новичок в Python и пытаюсь изучить этот язык, проверяя и создавая примеры шаблонов проектирования на Python.

Меня путает классическая реализация шаблона Singleton. В большинстве статей следующая реализация 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 мы предотвращаем это, делая конструктор класса закрытым.

Другая реализация, на которую мне указали, — это

Код: Выделить всё

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]
И это вскружило мне голову. Может кто-нибудь объяснить мне, как это работает?

Подробнее здесь: https://stackoverflow.com/questions/523 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»