101 игра на python. Шпаргалки. Синглтон (Singleton) в Python
В Python, синглтон – это шаблон проектирования, который гарантирует, что у класса будет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. Это значит, что при попытке создать новый объект этого класса, ты всегда будешь получать один и тот же объект.
Синглтоны полезны, когда нужно ограничить количество экземпляров класса, например:
Для управления подключением к базе данных (чтобы не открывать много подключений).
Для хранения глобальной конфигурации приложения (чтобы все части приложения использовали одну и ту же конфигурацию).
Для логгирования (чтобы все сообщения шли в один файл).
Преимущества синглтона:
Гарантия единственного экземпляра: Синглтон гарантирует, что класс будет иметь только один экземпляр. Это полезно для управления ресурсами, которые должны быть уникальными.
Глобальный доступ: Синглтон предоставляет глобальную точку доступа к экземпляру класса, что упрощает использование этого экземпляра в любой части программы.
Недостатки синглтона:
Глобальное состояние: Синглтон может привести к использованию глобального состояния, что может вызывать неожиданные побочные эффекты и усложнять тестирование.
Нарушение принципов ООП: Синглтон может нарушать принцип единственной ответственности и инкапсуляции.
Несколько способов реализации синглтона в Python.
1. Реализация Через переопределение метода __new__
Mетод __new__ отвечает за создание экземпляра класса. Переопределив его, я смогу контролировать этот процесс.
В этом примере я буду хранить единственный экземпляр класса в переменной _instance.
Если экземпляра еще нет, я его создам, иначе верну уже существующий экземпляр.
2. Реализация Через декоратор
Декоратор – это функция, которая модифицирует класс.
В этом примере я создаю функцию-декоратор singleton, которая принимает класс и возвращает его обернутую версию.
Внутри декоратора я храню экземпляры классов в словаре instances.
Если экземпляр класса еще не создан, я его создам и сохраню в словаре, иначе верну существующий экземпляр.
3. Реализация Через метакласс
Mетакласс позволяет контролировать создание классов.
В этом примере я создам метакласс SingletonMeta, который будет следить за созданием экземпляров.
Метакласс хранит экземпляры классов в словаре _instances.
При создании нового экземпляра, я проверяю, есть ли он уже в словаре, если нет – создаю, иначе возвращаю существующий экземпляр.
4. Реализация Через модуль
В Python модуль сам по себе является синглтоном.
Я могу создать объект в модуле, и он будет единственным экземпляром.
Когда использовать синглтон?
Когда тебе нужно, чтобы объект существовал в единственном экземпляре (например, конфигурация, логгер, подключение к базе данных).
Когда тебе требуется глобальный доступ к этому объекту.
Оригинала статьи в GIT
Другие шпаргалки:
Серия 101 игра на python с разбором кода. Портирую классические игры на язык python с добавлением искусственного интеллекта.
Серия информатика, с изложением терминов
UPD:
КОД ПЕРЕЕХАЛ ПО ЭТОМУ АДРЕСУ





Программирование на python
1K поста12K подписчиков
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако!
Приветствуется:
• уважение к читателям и авторам
• конструктивность комментариев
• простота и информативность повествования
• тег python2 или python3, если актуально
• код публиковать в виде цитаты, либо ссылкой на специализированный сайт
Не рекомендуется:
• допускать оскорбления и провокации
• распространять вредоносное ПО
• просить решить вашу полноценную задачу за вас
• нарушать правила Пикабу