Курс Python → Проектирование Singleton с метаклассом

Для проектирования Singleton с использованием метакласса в Python, мы можем определить метакласс, который будет контролировать создание экземпляров класса. Метакласс — это класс, экземпляры которого сами являются классами. Мы можем определить метод __new__ в метаклассе, чтобы контролировать создание экземпляров класса.

class SingletonMeta(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]

Затем мы можем определить наш класс, используя этот метакласс. Мы просто указываем metaclass=SingletonMeta в определении класса. Теперь при создании экземпляров этого класса, будет возвращаться один и тот же экземпляр.

class DatabaseConnection(metaclass=SingletonMeta):
    def __init__(self):
        print("Creating Database Connection")

Теперь, когда мы создаем экземпляры класса DatabaseConnection, каждый раз будет возвращаться один и тот же экземпляр. Это обеспечивает уникальность объекта и предотвращает создание дубликатов, что особенно полезно, например, при работе с соединениями к базе данных.

Пример использования:

db_conn1 = DatabaseConnection()
db_conn2 = DatabaseConnection()

print(db_conn1 is db_conn2)  # Выведет True, так как это один и тот же объект
Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Принципы Zen of Python
  2. Основы работы с базами данных в Python
  3. Правила именования переменных
  4. Операции с датами в Python
  5. Работа с кортежами
  6. Проверка типов с использованием isinstance
  7. Декораторы с аргументами
  8. Склеивание строк через метод join()
  9. Работа с областями видимости переменных
  10. Оптимизация памяти с slots
  11. Округление чисел с помощью round
  12. Python: Фильтрация списков с помощью filter()
  13. Вывод символов строки в Python
  14. Поиск с библиотекой Google
  15. Просмотр внешних файлов в %pycat
  16. Оператор @ для умножения матриц
  17. Управление асинхронными задачами с помощью Semaphore
  18. Генерация QR-кодов с библиотекой qrcode
  19. Модуль math: константы π и e
  20. Тест скорости набора текста на Python
  21. Основы работы со списками
  22. Оператор in для проверки наличия элемента
  23. Многострочные строки в Python
  24. Однострочники Python
  25. Псевдонимы в Python
  26. Асинхронное программирование с asyncio
  27. Удаление дубликатов с помощью множеств
  28. Поиск анаграмм с Counter
  29. Вывод сложных структур данных с помощью pprint
  30. Импорт модулей и пакетов в Python
  31. Хеши в Python
  32. Обработка данных в Python
  33. Преобразование PowerPoint в PDF.
  34. Пустой оператор pass в Python
  35. Метод enumerate() в Python
  36. Функция count() в Python
  37. discard() — удаление элемента из множества
  38. Участие в LP стейкинге Waves
  39. Возведение в квадрат с помощью itertools
  40. Работа с Path в Python
  41. Операция += для списков
  42. Docstring в Python
  43. Поиск индекса элемента в списке
  44. Перевернуть список в Python
  45. Обработка исключений с блоком else
  46. Функции классификации комплексных чисел

Marketello читают маркетологи из крутых компаний