Singleton (Одиночка) — порождающий шаблон проектирования, гарантирующий, что в однопроцессном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру. 📎 Реализация синглтона через декоратор класса: def singleton(cls): # храним все разные синглтоны с одном словаре (класс -> экземпляр) instances = {} def getinstance(): # если класса нет среди ключей нашего словаря - создадим экземпляр if cls not in instances: instances[cls] = cls() # вернем ссылку на него return instances[cls] return getinstance Вот так мы помечаем, что класс MySingleton – синглтон: @singleton class MySingleton: def __init__(self): self.x = 10 print("__init__") 📎 Пример (проверяем единственность экземляра): >>> x1 = MySingleton() init >>> x2 = MySingleton() >>> x1 is x2 True >>> x1.x = 100 >>> x2.x 100 • init было вызвано единажды • Обе переменные указывают на один экземпляр • При изменении полей в одном экземпляре, они меняются и во втором. Плохо то, что
Singleton (Одиночка) — порождающий шаблон проектирования, гарантирующий, что в однопроцессном приложении будет единственный экземпляр
23 мая 202223 мая 2022
33
1 мин